多任务分离任务

时间:2015-03-10 16:10:21

标签: python multiprocessing python-multiprocessing

我想在流程中分割两个不同的任务。我有一个任务,包括从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()

1 个答案:

答案 0 :(得分:3)

将呼叫转移到write_process.join(),直到呼叫pool.join()为止。 join调用在func退出之前就会阻塞,除非pool内容运行,否则不会发生这种情况。因此,只需致电start,然后暂停致电join,直到您能够运行pool代码。