我是多处理的新手,想要在一个函数中收集数据并同时在另一个函数中写入数据。这是我所拥有的伪代码。
def Read_Data():
for num in range(0,5):
## Read 5 random values
print('Reading ' + str(values[num]))
return(values)
def Write_data(values):
## Arrange the random values in ascending order
for num in range(0,5):
print('Writing' + str(arranged_values[num]))
if __name__=='__main__'
values = Read_Data()
Write_data(values)
我希望输出看起来像这样。
reading 1, writing none
reading 3, writing none
reading 5, writing none
reading 4, writing none
reading 2, writing none
reading 7, writing 1
reading 8, writing 2
reading 10, writing 3
reading 9, writing 4
reading 6, writing 5
现在我希望它并行运行的原因是为了确保我一直在收集数据,而不是在修改和打印时丢失数据。
如何使用多处理来实现?
答案 0 :(得分:2)
这应该说明一些概念。该队列用于在进程之间传递对象。
读者只需在某处获取其值并将其放在队列中。
作者永远监听队列。 添加“TERMINATED”信号是告诉作者永远停止聆听的一种非常简单的方式(使用信号和事件还有其他更有效的方法,但这只是说明了这一概念)。
最后,我们“加入”两个进程以确保它们在退出主进程之前退出(否则它们会在空间和时间中停留)
from multiprocessing import Process, Queue
from time import sleep
def reader(q):
for i in range(10):
print("Reading", i)
q.put(i)
sleep(1)
print("Reading TERMINATED")
q.put("TERMINATE")
def writer(q):
while True:
i = q.get()
if i == "TERMINATE":
print("Writer TERMINATED")
break
print("Writing", i)
q = Queue()
pr = Process(target=reader, args=(q,))
pw = Process(target=writer, args=(q,))
pw.start()
pr.start()
pw.join()
pr.join()