2
我遇到了線程意外的行爲。我已經把它貼在下面簡短的例子來演示行爲:類變量和線程 - 意外的行爲
from multiprocessing import Process, Lock
import time
class inc:
def __init__(self):
print "Initializing a new class"
self.value = 0
def add_one(self):
self.value += 1
print self.value
def f(a,l):
# Do something using a class call
l.acquire()
a.add_one()
l.release()
#Do something that takes a long time
time.sleep(5)
#Do a different thing using a class call
l.acquire()
a.add_one()
l.release()
if __name__=="__main__":
a=inc()
lock = Lock()
for i in range(0,4):
Process(target=f, args=(a,lock)).start()
我要找的輸出爲1,2,3,4,5,6,7,8,但我得到:1,1 ,1,1,2,2,2,2。我是否正確使用線程鎖定?只有一個類的實例存在,我序列化線程訪問類,所以爲什麼類變量不增加?
謝謝,這作品!事後看來,我的問題的答案相當簡單,但對於這些簡單的更改卻有很大的複雜性。我將花更多時間看看線程和多處理之間的差異。感謝您提供快速,準確和有用的答案。 – Chris