任务的多处理分离
Multiprocessing separation of tasks
我有两个不同的任务要在多个进程之间进行拆分。我有一项任务包括从 URL 检索响应并将响应写入 Queue
(多处理队列,而不是线程),我希望有几个进程并行处理。
我有另一个任务等待 Queue
有响应数据,从中检索响应,然后写入文件。我希望有一个流程来解决这个问题。
问题是,如果我启动一个处理 URL 的进程池,写入进程将不会启动,直到所有进程都完成。如何启动进程池以命中 URL 并启动进程以在另一个 time/one 之后写入文件?
我的代码:
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()
只需将调用移至 write_process.join()
,直到调用 pool.join()
之后。 join
调用一直处于阻塞状态,直到 func
退出,除非 pool
东西 运行 退出,否则不会发生这种情况。因此,只需调用 start
,并推迟调用 join
,直到您能够 运行 pool
代码。
我有两个不同的任务要在多个进程之间进行拆分。我有一项任务包括从 URL 检索响应并将响应写入 Queue
(多处理队列,而不是线程),我希望有几个进程并行处理。
我有另一个任务等待 Queue
有响应数据,从中检索响应,然后写入文件。我希望有一个流程来解决这个问题。
问题是,如果我启动一个处理 URL 的进程池,写入进程将不会启动,直到所有进程都完成。如何启动进程池以命中 URL 并启动进程以在另一个 time/one 之后写入文件?
我的代码:
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()
只需将调用移至 write_process.join()
,直到调用 pool.join()
之后。 join
调用一直处于阻塞状态,直到 func
退出,除非 pool
东西 运行 退出,否则不会发生这种情况。因此,只需调用 start
,并推迟调用 join
,直到您能够 运行 pool
代码。