У меня есть две разные задачи, которые я хочу разделить между процессами. У меня есть одна задача, которая состоит из получения ответов с 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()