Как мне повторно вызывать функцию?

#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