私はマルチプロセッシングで奇妙な動作に遭遇しました。マルチプロセッシングでグローバル変数が認識されませんか?
マルチプロセスから呼び出される関数でグローバル変数を使用しようとすると、グローバル変数が表示されません。
例:
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
出力:あなたが初めて見たよう
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
私は単に予想通り、それはasd
を印刷func
を呼び出します。しかし、私がマルチプロセッシングで非常に同じ関数を呼び出すと、変数variable
は存在しません。
マルチプロセッシングはグローバル変数を無視しますか?どうすればこのことができますか?