【发布时间】:2019-08-16 07:09:06
【问题描述】:
我想做以下事情:
- 从 csv 文件中读取数据
- 处理上述 csv 的每一行(假设这是一个长时间的网络操作)
- 将结果写入另一个文件
我尝试将 this 和 this 答案粘合在一起,但收效甚微。 第二个队列的代码永远不会被调用,因此不会写入磁盘。如何让进程知道有第二个队列?
请注意,我不一定是multiprocessing 的粉丝。如果async/await 效果更好,我完全赞成。
到目前为止我的代码
import multiprocessing
import os
import time
in_queue = multiprocessing.Queue()
out_queue = multiprocessing.Queue()
def worker_main(in_queue, out_queue):
print (os.getpid(), "working")
while True:
item = in_queue.get(True)
print (os.getpid(), "got", item)
time.sleep(1) #long network processing
print (os.getpid(), "done", item)
# put the processed items to be written to disl
out_queue.put("processed:" + str(item))
pool = multiprocessing.Pool(3, worker_main,(in_queue,out_queue))
for i in range(5): # let's assume this is the file reading part
in_queue.put(i)
with open('out.txt', 'w') as file:
while not out_queue.empty():
try:
value = q.get(timeout = 1)
file.write(value + '\n')
except Exception as qe:
print ("Empty Queue or dead process")
【问题讨论】:
标签: python python-multiprocessing