#python #multithreading #multiprocessing #python-multiprocessing #python-multithreading
#python #многопоточность #многопроцессорная обработка #python-многопроцессорность #python-многопоточность
Вопрос:
С помощью модуля multiproproccessing.dummy
я хочу выполнить функцию getData()
10 раз. Однако print
функция вызывается только один раз.
from multiprocessing.dummy import Pool as ThreadPool
print("Begin")
import itertools
import urllib.request
import time
def getData():
print("Do something...")
t0 = time.time()
with ThreadPool(10) as pool:
results = pool.map_async(getData(), iterable=(x for x in range(10)))
t1 = time.time()
totalTime = t1-t0
print ("Total Cyclic time: ", totalTime)
Комментарии:
1. Вы имели в виду:
pool.map_async(getData, ...)
?2. Да, я делаю @quamrana.
Ответ №1:
Вы вызываете getData()
ее перед передачей в map_async
, который передает ее результаты, вместо того, чтобы передавать саму функцию.
Измените getData()
на getData
, и все должно быть в порядке.
results = pool.map_async(getData, ...)
Комментарии:
1. Хорошо, это звучит разумно. Еще одна вещь, что мне нужно заполнить в …? аргумент: ‘итерируемый
2. Извините, я просто не хотел перепечатывать то, что у вас было в вашем вопросе. Я полагаю, что вы столкнетесь по крайней мере с еще одной ошибкой (getData не принимает аргументы, но вы привязываетесь к передаче значений из вашей итерации в качестве аргументов).
3. пул функций.map_async нуждается в следующих аргументах: func, iterable. Вот почему я закодировал ее таким образом. Я не знаю, чем заполнить ‘iterable’. Смотрите docs.python.org/3/library/multiprocessing.html