У меня возникают очень странные проблемы при работе с данными внутри моей функции, которые вызывается пулом pool.map. Например, следующий код работает, как ожидалось ...python no output при использовании pool.map_async
import csv
import multiprocessing
import itertools
from collections import deque
cur_best = 0
d_sol = deque(maxlen=9)
d_names = deque(maxlen=9)
**import CSV Data1**
def calculate(vals):
#global cur_best
sol = sum(int(x[2]) for x in vals)
names = [x[0] for x in vals]
print(", ".join(names) + " = " + str(sol))
def process():
pool = multiprocessing.Pool(processes=4)
prod = itertools.product(([x[2], x[4], x[10]] for x in Data1))
result = pool.map_async(calculate, prod)
pool.close()
pool.join()
return result
process()
Теперь, когда я добавить простое заявление, если-вычислять(), я не получаю никакого вывода.
def calculate(vals):
#global cur_best
sol = sum(int(x[2]) for x in vals)
if sol > cur_best:
cur_best = sol
names = [x[0] for x in vals]
print(", ".join(names) + " = " + str(cur_best))
#would like to append cur_best and names to a deque
Я попытался настроить, где объявляю «cur_best» безрезультатно.
Я пытаюсь отслеживать «текущее лучшее» решение, поскольку я выполняю вычисления. В моем линейном коде эта логика находится в вложенном for-loop, и я добавляю каждый новый cur_best в deque.
Связаны ли мои новые проблемы с пулом pool.map или pool.map_async? Могу ли я больше не обрабатывать функцию calculate() как линейный цикл?
Существует несколько других условных утверждений, которые мне нужно адресовать. Должен ли я обрабатывать это в другой части кода? И если да, то как именно?
является 'global' закомментирована в Вашем коде? –
Использование 'multiprocessing' будет создавать несколько процессов (здесь 4) с каждым их собственным значением глобального' cur_best', поэтому ваша структура кода не будет работать. –
@JasonS да глобально закомментировано – nodoze