ファイルやグローバル変数を読み込むためのPythonマルチプロセスをテストしただけですが、何か不思議なことが起こります。 expampleため何か奇妙なことがPythonマルチプロセスで起こる
:
import multiprocessing
a = 0
def test(lock, name):
global a
with lock:
for i in range(10):
a = a + 1
print "in process %d : %d" % (name, a)
def main():
lock = multiprocessing.Lock()
p1 = multiprocessing.Process(target=test, args=(lock, 1))
p2 = multiprocessing.Process(target=test, args=(lock, 2))
p1.start()
p2.start()
p1.join()
p2.join()
print "in main process : %d" % a
if __name__=='__main__':
main()
プログラムは、グローバル変数を読みますが、出力は次のようになります。
in process 1 : 10
in process 2 : 10
in main process : 0
サブプロセスが適切にグローバル変数を取得し、編集することはできませんようです。また、プログラムを変更してファイルを読み込むと、各サブプロセスはファイルを完全に読み込み、ロックを無視します。
これはどのように起こりますか?そしてこの問題を解決するには?
私はあなたがあなたがマルチスレッドの代わりに、同時実行のためのマルチプロセッシング使用する場合があります 'multiprocessing.Manager' – mgilson
を使用してグローバル状態を管理する必要があるだろうと信じている:ここでは例です。すべてのスレッドは、単一のプロセスの一部です。 – VPfB