2014-12-23 71 views
0

這是我的代碼:Python字典總是重置爲零

class tclass: 
    value = 0 
    lo = multiprocessing.Lock() 
    def increase(self): 
     print 'befor',self.value 
     with self.lo: 
      self.value+=1 
     print 'after',self.value 


tc = tclass() 

def starttclassvalue(): 
    for i in range(10): 
     tc.increase() 

if __name__ == '__main__': 
    multiprocessing.process.Process(target=starttclassvalue).start() 
    multiprocessing.process.Process(target=starttclassvalue).start() 
    multiprocessing.process.Process(target=starttclassvalue).start() 
    multiprocessing.process.Process(target=starttclassvalue).start() 

爲什麼值設爲零,從零開始?出

: 後 後 後 後 後

befor 0 後1 befor 1 2 befor 2 3 befor 3 4 befor 4 5 befor 5 6 befor 6 後7 befor 7 8之後 之前8 之後9 之前9 後 後 後 後 後 後 後後10 befor 0 1 befor 1 2 befor 2 3 befor 3 4 befor 4 5 befor 5 6 befor 6 7 befor 7 後1 befor 1 後 後 後8 befor 8 9 befor 9 後10 befor 0 2 後befor 2 後 後 後 後 後 後 後3 befor 3 4 befor 4 5 befor 5 6 befor 6 7 befor 7 8 befor 8 9 befor 9 10 befor 後 後0 後1 befor 1 2 befor 2 3 befor 3 後4 befor 4後5 befor 5 後6 befor 6 後7 befor 7 後8 befor 8 後9 befor 9 後10

爲什麼在tclass值不是30在端程序?

+1

您發佈的代碼沒有這樣做(您可以在輸出中清楚地看到''hci1':1')。既然你立即從該函數返回,函數的其餘部分不能負責。結論,**其他**必須這樣做。你沒有在這裏發佈任何東西。 –

+0

請注意,您沒有使用任何其他信息標記您的'print'語句。添加一個輸入函數的打印語句(例如'print'輸入GetFreeBluetoothhciid''),或者現有的'print'語句中的哪一個是(增量前打印'HCI_STATUS',self.HCI_STATUS和print'HCI_STATUS ',self.HCI_STATUS'),所以這裏可能不會立即顯而易見。 –

+0

我編輯並編寫簡單代碼 – user3585139

回答

1

用父進程的內存COPY創建一個新進程。對任何子進程的內存所做的更改不會影響父進程。該內存不共享。你可以通過使用線程(它們共享父進程的相同內存)而不是多處理庫來實現你想要的。