Python 运行两个无止境的并行循环

Python 运行两个无止境的并行循环,python,multithreading,Python,Multithreading,我想运行两个无止境的并行循环。一种是从服务器读取数据并用数字更新对象。另一种是什么也不做,然后阅读它,如果有变化,处理它。不一定要同步。因此,我的问题是: 在从一个侧面写而从另一个侧面读的情况下,Python有问题吗? 如果出现同步问题,是否需要锁定读/写进程?还有别的办法吗 我应该做吗? 什么是最好的使用,线程还是线程? 作为下一步,我将从100个站点读取并更新100个对象, 并从100个循环中读取更改。是否建议从服务器上使用多处理 这样我就可以毫无问题地扩展?我需要读写问题吗? 感谢您的帮助

我想运行两个无止境的并行循环。一种是从服务器读取数据并用数字更新对象。另一种是什么也不做,然后阅读它,如果有变化,处理它。不一定要同步。因此,我的问题是:

在从一个侧面写而从另一个侧面读的情况下,Python有问题吗? 如果出现同步问题,是否需要锁定读/写进程?还有别的办法吗 我应该做吗? 什么是最好的使用,线程还是线程? 作为下一步,我将从100个站点读取并更新100个对象, 并从100个循环中读取更改。是否建议从服务器上使用多处理 这样我就可以毫无问题地扩展?我需要读写问题吗?
感谢您的帮助。

简短的回答是,无论您认为什么都可以理解。 也就是说,您的代码对于您的学习目的应该是有意义的

这里有一个例子,它很轻,很容易使用。 从线程中获取值很容易。。
对于同一个CPU核心,它不是真正的多线程

from threading import *

class worker(Thread):
    def __init__(self, input=0):
        self.input = input
        Thread.__init__(self)
        self.start()

    def run(self):
        while 1:
            self.input += 1

x = worker(-100)
y = worker(x.input)

print y.input
这只是一个示例,说明Y线程可以访问x中的数据。。实际上,考虑到两个线程将更新相同的变量,这可能是危险的:简言之,每个周期将计算两次:-100,-98,-96,-94。。等

不会跨越多个CPU 易于使用跨线程访问数据非常容易 逻辑代码,如果您不熟悉队列系统或分布式系统 如果操作系统不能创建更多的线程,将引发一个错误
请注意,您可以使用100个生产者和一个消费者进行扩展,当然,一个队列100个线程也可以,但是如果您想要10000个线程,情况会有所不同,您将使用Python,对吗?我添加了python语言标记。如果可以将两个任务合并到一个循环中,这比使用线程简单得多。不,不建议合并到一个循环中。双方都是完全异步的,所以一个用于监听,一个用于处理。所以现在我有100个监听站点和100个处理站点。它们都有不同的执行时间。这不是真正的多线程tho-但它是!限制是指一次只能执行一个Python代码。但在Python调用之外,所有可能发生的事情我所知道的是,输出这些代码将创建异步代码,这些代码可以并行执行,但不会跨越多个CPU,这实际上不会创建硬件意义上的多处理应用程序。。但您将能够运行softwareos多线程代码块:它可以工作,底线是:多处理模块使用OS进程,而线程使用OS线程。这两种处理器都可以利用多核机器,除非你正在使用线程和全局解释器锁。谢谢,我唯一关心的是一个处理器100%运行,其余处理器处于空闲状态。那么建议使用什么呢?我想说,多处理是一种方式,它可能是唯一一种能够真正实现不同内核或处理器的方法:非常感谢,我将做一些测试。其概念是一方监听100服务器,获取数据并更新相关对象。另一端只是在循环中运行以读取和处理数据。我仍然不确定当处理器以90%的速度运行时,多处理是否不是更好?有什么建议吗?当更新和读取同时发生时,系统如何反应?它是否崩溃?这是我最大的担忧。如果你有多核和多处理,如果进程是CPU绑定的,那么多处理更好。同样使用队列,请看下面有锁,这样可以保证读写不会同时发生。如果进程是在消费端,那么你可以有多个进程使用同一队列
from threading import Thread
from Queue import Queue

class producer(Thread):
    def __init__(self,queue):
        Thread.__init__(self)
        self.queue=queue
        self.start()
    def run(self):
        while 1:
            self.queue.put(update_value())

class consumer(Thread):
    def __init__(self,queue):
        Thread.__init__(self)
        self.queue=queue
        self.start()
    def run(self):
        while True:
            value = queue.get()
            do_whatever_you_want(value)
queue = Queue()
producer(queue)
consumer(queue)