Я использую multiprocessing.dummy.Pool
. Я создаю одиночный пул потоков на уровне модуля, а затем использую pool.apply_async(requests.get, [params])
для запуска задачи.
Эта команда дает мне будущее, которое я могу добавить в список с другими фьючерсами неограниченно, пока не захочу собрать все или некоторые результаты.
multiprocessing.dummy.Pool
, против всей логики и причины, пула THREAD, а не пула процессов.
Пример (не работает как Python 2 и 3, до тех пор, как установлено запросы):
from multiprocessing.dummy import Pool
import requests
pool = Pool(10) # Creates a pool with ten threads; more threads = more concurrency.
# "pool" is a module attribute; you can be sure there will only
# be one of them in your application
# as modules are cached after initialization.
if __name__ == '__main__':
futures = []
for x in range(10):
futures.append(pool.apply_async(requests.get, ['http://example.com/']))
# futures is now a list of 10 futures.
for future in futures:
print(future.get()) # For each future, wait until the request is
# finished and then print the response object.
Запросы будут выполняться параллельно, поэтому запуск все десять из этих запросов должно занимать не более длинный один. Эта стратегия будет использовать только одно ядро ЦП, но это не должно быть проблемой, потому что почти все время будет потрачено на ожидание ввода-вывода.
В отличие от проблем параллелизма CPU переплете в Python, это, возможно, может быть решена с отдельным потоком, или использование 'multiprocessing.dummy' для пула потоков , –