繁体   English   中英

运行两个无限的并行循环

[英]Running two endless parallel loops

我想运行两个无尽的并行循环。 一种是从服务器读取数据并用数字更新对象。 另一个是什么也不做,然后读取它,如果有更改,则对其进行处理。 不必保持同步。 所以我的问题是:

  • 如果从一侧写而从另一侧读,Python会有问题吗?
  • 万一出现同步问题,是否需要锁定读写进程? 还有其他方法吗?
  • 最好使用什么,线程还是线程?
  • 下一步,我将从100个站点读取并更新100个对象,并从100个循环读取更改。 是否建议从一开始就使用Multiprocessing,这样我就可以毫无问题地进行扩展? 我需要读写问题吗?

任何帮助表示赞赏。

简短的答案是,您认为可以理解的任何内容。 意思是,出于学习目的,您的代码应该对您有意义。

这是一个例子,它轻巧易用。 从线程获取值和向线程获取值很容易。这不是实际的多线程(同一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
  • 易于使用(跨线程访问数据很容易)
  • 逻辑代码(如果您不熟悉队列系统或分布式系统)
  • 如果操作系统无法创建更多线程,则会引发错误(“限制”)
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,则情况会有所不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM