Недавно я столкнулся с проблемой с многопроцессорным пакетом Python, которая меня озадачила. В программе у меня есть следующие строки кода:
import multiprocessing as mp
...
def logResult(result):
results.append(result)
cpu = mp.cpu_count()
pool = mp.Pool(processes=cpu)
results = []
num = 400 # A tunable parameter
for x in range(0, num):
pool.apply_async(integrationFunction, args=(<some list of arguments...>), callback=logResult)
pool.close()
pool.join()
print(len(results)) # Unpredictable
...
Я действительно не могу точно показать, что происходит в integrationFunction
, но я знаю следующее: - В какой-то момент он использует numpy.dblquad
, иможет быть довольно медленным.
Проблема в том, что в последней строке кода, где я печатаю длину списка results
, я получаю ошибочный результат при каждом запуске программы - обычно она выводит некоторыечисло около 100-120, когда num
равно 400, но в некоторых случаях он может печатать числа за пределами диапазона (а иногда даже 0). Но я ожидаю, что он напечатает ровно num
(что в нашем примере равно 400) - по каким причинам это может происходить?
Спасибо!