Отлично работает следующий код:
from multiprocessing import Pool
import time
values = list(range(10))
def print_time_and_value(value):
print(time.time(), value)
if __name__ == '__main__':
p = Pool(4)
p.map(print_time_and_value, values)
но когда я изменяю импорт "multiprocessing" на "multiprocess" library:
from multiprocess import Pool
во время выполнения возникает следующая ошибка:
Traceback (most recent call last):
File "test.py", line 13, in <module>
p.map(print_time_and_value, values)
File "C:\Users\User\Anaconda3_64bits\lib\site-packages\multiprocess\pool.py", line 268, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:\Users\User\Anaconda3_64bits\lib\site-packages\multiprocess\pool.py", line 657, in get
raise self._value
NameError: name 'time' is not defined
Я не могу использовать многопроцессорность, так как позже мне придется использовать непробиваемые объекты в моем основном приложении, поэтому я должен использовать многопроцессорность с сериализацией укропов.
Я заметил, что помещение импорта "time" в функцию "print_time_and_value" вместо глобальной области видимости решает эту проблему, но это поведение немного странно. Так как это форк многопроцессорной обработки, я предположил, что он будет работать так же.
Я использую Python 3.7.0, многопроцессорный модуль версии 0.70.7; работает в 64-битной среде Anaconda, Windows 10.