并行,相互依存的流程 - 如何推动变量?

时间:2017-02-12 13:15:55

标签: python loops parallel-processing

这是this问题的后续跟进,如果感兴趣的话。

为了让您免于阅读,以下是总结: 我有两个进程,都需要无限期运行。

我需要进程1来扫描网站以获取特定的URL,例如每10分钟左右。这些URL存储在SetQueue中,因此我没有双重条目。每个循环都会产生一定数量的URL。第一次运行后,大部分将被存储,但也会有一些新的,也需要存储在队列中。

进程2接收一个列表,该列表来自队列并每10秒连续擦除一次URL,以检查更改的AJAX值。

我需要帮助的问题是,当进程2以与进程1不同的频率运行时,如何使进程2接收更新的列表。

以下是该流程的代码模型:

from multiprocessing import Process, Queue
import time, random

def a(queue):
    while True:
        x=[random.randint(0,10), random.randint(0,10), random.randint(0,10)]
        print 'send', x
        queue.put(x)
        time.sleep(20)


def b(queue):
    x = queue.get()
    print 'recieve', x
    while True:        
        for i in x:
            print i
            time.sleep(2)

if __name__ == '__main__':
    q = Queue()
    p1 = Process(target=a, args=(q,))
    p2 = Process(target=b, args=(q,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

该模型有一个大问题,我无法解决:如何使进程b收到更新列表?与我在引用的问题中得到的答案相比,我将while循环放在迭代for i in x:的前面,因为这给了我一个我想要的继续处理循环。但很自然,来自进程a的所有新输入都被忽略了。 我相信,对于“真正的”程序员来说,这是一个非常容易的问题,但我在这里找不到解决方案。任何帮助表示赞赏。我应该继续使用Process吗?

0 个答案:

没有答案