这是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吗?