Ich bin bei Multiprocessing in ein seltsames Verhalten geraten.Multiprozessing sieht keine globalen Variablen?
Wenn ich versuche, eine globale Variable in einer Funktion zu verwenden, die von Multiprocessing aufgerufen wird, wird eine globale Variable nicht angezeigt.
Beispiel:
import multiprocessing
def func(useless_variable):
print(variable)
useless_list = [1,2,3,4,5,6]
p = multiprocessing.Pool(processes=multiprocessing.cpu_count())
variable = "asd"
func(useless_list)
for x in p.imap_unordered(func, useless_list):
pass
Ausgang:
asd
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
File "/usr/lib/python3.4/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "pywork/asd.py", line 4, in func
print(variable)
NameError: name 'variable' is not defined
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "pywork/asd.py", line 11, in <module>
for x in p.imap_unordered(func, useless_list):
File "/usr/lib/python3.4/multiprocessing/pool.py", line 689, in next
raise value
NameError: name 'variable' is not defined
Wie Sie das erste Mal sehe ich einfach nur func
es asd
wie erwartet gedruckt nennen. Aber wenn ich die gleiche Funktion mit Multiprocessing anrufe, heißt es, dass die Variable variable
nicht existiert, auch nachdem ich sie gerade vorher deutlich gedruckt habe.
Hört Multiprozessorverarbeitung globale Variablen? Wie kann ich das umgehen?