Я столкнулся с неожиданным поведением при работе с потоками. Я приложил короткий пример ниже, чтобы продемонстрировать поведение:
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. Я правильно использую блокировку потоков? Существует только один экземпляр класса, и я сериализирую поток доступа к классу, так почему же переменная класса не увеличивается?