当一个从另一个收集数据时,如何在 python 中并行 运行 两个函数?

How to run two functions in parallel in python when one collects data from the other?

我是多处理新手,想在一个函数中收集数据并同时在另一个函数中写入数据。这是我所拥有的伪代码。

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

现在我希望它 运行 并行的原因是确保我一直在收集数据并且在修改和打印时不会丢失数据。

如何使用多处理来实现?

这应该说明一些概念。队列用于在进程之间传递对象。

reader 只是在某处获取它的值并将其放入队列。

作者永远在队列中监听。 添加 "TERMINATED" 信号是告诉编写者永远停止收听的一种非常简单的方法(还有其他更有效的使用信号和事件的方法,但这只是说明了这个概念)。

最后,我们 "join" 对两个进程进行检查,以确保它们在我们退出主进程之前退出(否则它们会在 space 和时间中挂起)

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