Ваш текущий код на самом деле не обрабатывает какую-либо реальную работу для рабочего потока.Вы вызываете requests.get(url.json())
прямо в главном потоке, а затем передаете объект, который возвращается к pool.apply_async
.Вы должны делать pool.apply_async(requests.get, (url.json(),))
вместо этого.Тем не менее, даже если вы исправили эту проблему, вы сразу же ожидаете ответа на вызов, что означает, что вы никогда не выполняете никаких вызовов одновременно.Вы отправляете один элемент в цепочку, ожидаете его выполнения, затем ждете следующего элемента.
Вам необходимо:
- Исправить проблему, когда вы случайно оказалисьвызов
requests.get(...)
в главном потоке. - Либо используйте
pool.map
для одновременной передачи списка рабочих процессов рабочим потокам, либо продолжайте использовать pool.apply_async
, но вместо немедленного вызова async_result.get()
, storeвсе объекты async_result
в списке, и после итерации по variables
выполните итерацию по списку async_result
и вызовите .get()
для каждого элемента.Таким образом, вы фактически выполняете все вызовы одновременно.
Итак, если бы вы использовали apply_async
, вы бы сделали что-то вроде этого:
async_results = [pool.apply_async(requests.get, (build_url(item),)) for item in variables]
for ar in async_results:
result = ar.get()
# do stuff with result
С pool.map
это будет:
results = pool.map(requests.get, [build_url(item) for item in variables])