我想在流程中分割两个不同的任务。我有一个任务,包括从URL检索响应并将响应写入Queue
(多处理队列,而不是线程),我希望有一些并行处理的进程。
我有另一个任务,等待Queue
有响应数据,从中检索响应,并写入文件。我希望有一个流程可以解决这个问题。
问题是如果我启动一个处理URL的进程池,写入进程将不会开始,直到完成所有进程。如何启动进程池来访问URL并启动进程以同时/一个接一个地写入文件?
我的代码:
CSV = CHANNEL + ".csv"
response_queue = Queue()
urls = []
for row in read_channel_data(CSV):
url = "https://some_domain/%s" % row[1]
urls.append(url)
# This process will start and wait for response_queue to fill up inside func
write_process = Process(target=func, args=(response_queue,))
write_process.start()
write_process.join()
# This never starts
pool = Pool(processes=PROCESSES)
pool.map_async(get_data, urls)
pool.close()
pool.join()
答案 0 :(得分:3)
将呼叫转移到write_process.join()
,直到呼叫pool.join()
为止。 join
调用在func
退出之前就会阻塞,除非pool
内容运行,否则不会发生这种情况。因此,只需致电start
,然后暂停致电join
,直到您能够运行pool
代码。