multiprocessing.Lock() の使用方法を試してみました
例からの作業:
http://docs.python.org/2/library/multiprocessing.html
実際、この例:
from multiprocessing import Process, Lock
def f(l, i):
l.acquire()
print 'hello world', i
l.release()
if __name__ == '__main__':
lock = Lock()
for num in range(10):
Process(target=f, args=(lock, num)).start()
私はこれを私のコードとして持っていました:
from multiprocessing import Process, Lock
import datetime
import time
import random
def function(lock, i):
now = datetime.datetime.now()
time.sleep(random.randint(0,3))
lock.acquire()
print "%s says hello, World! at time: %s" % (i,now)
lock.release()
lock = Lock()
for i in range(2):
Process(target=function,args=(lock,i)).start()
シェルで実行すると、コンピューターが 100% の CPU でロックアップし、cmd で多数の python.exe が実行されます。常にプロセス0またはプロセス1からメッセージを出力している間。例を見ると、次のことを見逃していることに気付きました。
if __name__ == '__main__':
だから私は貨物コードの神々を恐れてそれを追加しました、そして孤独な見よ:
from multiprocessing import Process, Lock
import datetime
import time
import random
def function(lock, i):
now = datetime.datetime.now()
time.sleep(random.randint(0,3))
lock.acquire()
print "%s says hello, World! at time: %s" % (i,now)
lock.release()
if __name__ == "__main__":
lock = Lock()
for i in range(2):
Process(target=function,args=(lock,i)).start()
版画:
1 says hello, World! at time: 2013-05-20 19:40:13.843000
0 says hello, World! at time: 2013-05-20 19:40:13.843000
編集は名前空間に関係しているのではないかと考えたので、試しました:
from multiprocessing import Process, Lock
import datetime
import time
import random
def function(l, i):
now = datetime.datetime.now()
time.sleep(random.randint(0,3))
l.acquire()
print "%s says hello, World! at time: %s" % (i,now), i
l.release()
lock = Lock()
for i in range(2):
Process(target=function,args=(lock,i)).start()
まだ同じ問題
私を混乱させますか?誰でもこれについて説明できますか?
最終編集:
これが私の小さなサンプルコードを完成させた方法です:
from multiprocessing import Process, Lock
import datetime
import time
import random
print "imports done"
def function(l, i):
now = datetime.datetime.now()
time.sleep(random.randint(0,3))
l.acquire()
print "%s says hello, World! at time: %s" % (i,now)
l.release()
def main():
lock = Lock()
for i in range(2):
Process(target=function,args=(lock,i)).start()
if __name__ == "__main__":
main()
どちらが印刷されますか:
imports done
imports done
imports done
1 says hello, World! at time: 2013-05-20 23:26:41.015000
0 says hello, World! at time: 2013-05-20 23:26:41.015000