Я пытаюсь запустить многопроцессорную обработку внутри метода.Однако обратный вызов не работает должным образом.
Вот пример того, чего мне нужно достичь.
from multiprocessing import Pool
from time import sleep
import random
def sum(task, a, b):
sleepTime = random.randint(1, 4)
print(task, " requires ", sleepTime, " seconds to finish")
sleep(sleepTime)
return a+b
def printResult(result):
print(result)
myPool = Pool(5)
result1 = myPool.apply_async(sum, args=("task1", 10, 20,), callback = printResult)
result2 = myPool.apply_async(sum, args=("task2", 20, 30,), callback = printResult)
result3 = myPool.apply_async(sum, args=("task3", 30, 40,), callback = printResult)
result4 = myPool.apply_async(sum, args=("task4", 40, 50,), callback = printResult)
result5 = myPool.apply_async(sum, args=("task5", 50, 60,), callback = printResult)
print("Submitted tasks to pool")
myPool.close()
myPool.join()
Это прекрасно работает, возвращая
Submitted tasks to pool
task1 requires 3 seconds to finish
task2 requires 4 seconds to finish
task3 requires 1 seconds to finish
task4 requires 4 seconds to finish
task5 requires 1 seconds to finish
110
70
30
50
90
Однако, когда я оборачиваю многопроцессорную обработку внутри метода и вызываю этот метод, кажется, что она не работает должным образом.
например,
def run_mp():
from multiprocessing import Pool
from time import sleep
import random
def sum(task, a, b):
sleepTime = random.randint(1, 4)
print(task, " requires ", sleepTime, " seconds to finish")
sleep(sleepTime)
return a+b
def printResult(result):
print(result)
myPool = Pool(5)
result1 = myPool.apply_async(sum, args=("task1", 10, 20,), callback = printResult)
result2 = myPool.apply_async(sum, args=("task2", 20, 30,), callback = printResult)
result3 = myPool.apply_async(sum, args=("task3", 30, 40,), callback = printResult)
result4 = myPool.apply_async(sum, args=("task4", 40, 50,), callback = printResult)
result5 = myPool.apply_async(sum, args=("task5", 50, 60,), callback = printResult)
print("Submitted tasks to pool")
myPool.close()
myPool.join()
, когда вызывается run_mp()
, он просто возвращает следующее.
Submitted tasks to pool
Это не просто проблема с печатью стандартного вывода на экране.В реальной проблеме, с которой я имею дело, похоже, нет правильного вызова функции обратного вызова.