任务的多处理分离

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 代码。