Это делается на примере машинного обучения, но я не верю, что проблема или решение конкретно связаны с ним с использованием keras / tenorflow.
__init__.py
файл с каким-то глобальным состоянием, которое я не могуобойтись ...
## Silly module with some odd state variables
global __STATE
__STATE = 3
def add(x):
if __STATE == 3:
return x + __STATE
else:
return 0
def finish():
global __STATE
__STATE = None
del __STATE
return
Многопроцессорный код Я хочу получить работу
def doSomethingComplicated(x):
# x = x + y
# import some libraries
import stateFullStuff
# create some of its own processes and run them
x = stateFullStuff.add(x)
print (x)
stateFullStuff.finish()
# print ("finished")
return x
from multiprocessing import Pool
if __name__ == '__main__':
x_ = range(100)
pool = Pool(3)
results = pool.map(doSomethingComplicated,x_)
print ("results: ", results)
Теперь это работает нормально, если число работников в пуле равно или больше, чем len (х_) но это недопустимо.Для всеобщего интереса глобальное состояние, вызывающее проблемы в моем реальном коде, - это загруженный бэкэнд тензорного потока в Keras.Я полагаю, что сессия закрыта, когда задача выполнена, но следующая задача для некоторого работника все еще видит старую сессию ...