1

我想运行两个无限的并行循环。一种是从服务器读取数据并用数字更新对象。另一个什么也不做,然后读取它,如果发生变化,处理它。不必同步左右。所以我的问题是:

  • 如果从一侧写入并从另一侧读取,Python 是否有问题?
  • 如果我遇到同步问题,是否需要锁定读/写进程?我应该做其他任何方式吗?
  • 最好用什么,穿线还是穿线?
  • 下一步,我将从 100 个站点读取并更新 100 个对象,并从 100 个循环中读取更改。是否建议从一开始就使用 Multiprocessing 以便我可以毫无问题地扩展?我需要在读写问题上吗?

任何帮助表示赞赏。

4

2 回答 2

0
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)

请注意,您可以通过使用 100 个生产者和一个消费者(当然还有一个队列)来扩展 100 个线程应该没问题,但如果您想要 10000 个,情况会有所不同

于 2013-04-22T17:05:43.820 回答
0

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

这是一个示例,它轻巧且易于使用。从线程中获取值很容易。这不是实际的多线程(相同的 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
  • 易于使用(跨线程访问数据很容易)
  • 逻辑代码,如果您不熟悉队列系统或分布式系统
  • 如果操作系统无法创建更多线程,将引发错误(“限制”)
于 2013-04-22T16:45:38.070 回答