这是我的代码:
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()
为什么值设置为零并从零开始?
out:
befor 0 1之后 1 2之后 2 3之后 因为3 4点之后 4 5点以后 5 6点以后 因为6 7点之后 因为7 8点以后 因为8 9点以后 因为9 10点以后 因为0 1之后 1 2之后 2 3之后 因为3 4点之后 4 5点以后 5 6点以后 因为6 7点之后 因为7 8点以后 因为8 9点以后 因为9 10点以后 因为0 1之后 1 2之后 2 3之后 因为3 4点之后 4 5点以后 5 6点以后 因为6 7点之后 因为7 8点以后 因为8 9点以后 因为9 10点以后 因为0 1之后 1 2之后 2 3之后 因为3 4点之后 4 5点以后 5 6点以后 因为6 7点之后 因为7 8点以后 因为8 9点以后 因为9 10点之后
为什么tclass中的值在结束程序中不是30?
答案 0 :(得分:1)
使用父进程的内存的COPY创建新进程。对任何子进程的内存的更改不会影响父进程。那个记忆不是共享的。您可以通过使用线程(共享父进程的相同内存)而不是多处理库来实现您想要的功能。