У меня есть программа, которая должна выполнять множество запросов по сети, поэтому я занимаюсь распараллеливанием работы. Это действительно I/O-ограниченным, я просто делаю:динамически меняет число параллельных потоков.
for i in range(options.workers):
w = Worker(queue, output_queue, options.site)
w.setDaemon(True)
w.start()
for i, dataset_metadata in enumerate(datasets_metadata):
queue.put((i+1, dataset_metadata))
queue.join()
options.workers
приходит из командной строки. Теперь я хочу динамически изменять количество работ.
Первый вопрос: как добавить работников после queue.join
?
Второй вопрос: как оценить оптимальное количество рабочих во время выполнения? Я думаю, что я должен следить за задачами/временем скорости, увеличивать число рабочих, пока это соотношение не изменится.
Убедитесь, что вы понимаете недостатки использования потоков с помощью python. Читайте о [GIL] (http://wiki.python.org/moin/GlobalInterpreterLock). – Vikas
@Vikas: как я уже сказал, моя проблема ограничена I/O –