Я пытаюсь получить свою функцию, которая делает веб-запросы для всех элементов списка:
import myClass
def getForAll(elements):
myList = []
for element in elements:
myList.append([element] + myClass.doThing(element))
return myList
Я пробовал следующее, но оно всегда истекло:
import myClass
from multiprocessing import Pool
def getForAll(elements):
pool = Pool()
queries = []
for element in elements:
queries.append(pool.apply_async(myClass.doThing, element))
myList = []
for query in queries:
myList.append(query.get(timeout=10))
return myList
Однако это не проблема времени, потому что удаление таймаута просто заставляет его работать вечно.
queries.append(pool.apply_async(myClass.doThing, [element]))
Тоже ничего не изменилось.
Для пояснения: я вызываю getForAll()
со списком строк, а функция doThing()
возвращает список списков строк. Мне не нужен порядок, чтобы остаться прежним, но было бы неплохо, если это возможно. Кроме того, мне не нужно разделять «CPU-Work» на несколько ядер, я просто не хочу ждать около одной секунды на элемент, потому что doThing
дважды вызывает requests.get()
, и я считаю, что это можно сделать для всех элементы одновременно, не дожидаясь ответа, заставляя код выполняться с одинаковой скоростью независимо от количества элементов?