使用python更改线程中的对象值 [英] change object value in threads using python
本文介绍了使用python更改线程中的对象值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对Python很陌生,因此可能会问一个简单的问题.
I am very new to Python, thus am possibly asking a simple question.
我正在用Python编写多进程代码:
I am wrting a multiprocess code with Python:
from multiprocessing import Process
from multiprocessing import Queue
class myClass(object):
def __init__(self):
self.__i = 0
self.__name = 'rob'
return
def target_func(self, name, q):
self.__name = name
print 'Hello', self.__name
self.__i += 1
print self.__i
q.put([self.__i, self.__name])
return
def name(self):
return self.__name
def i(self):
return self.__i
if __name__ == '__main__':
mc = myClass()
q = Queue()
p = Process(target = mc.target_func, args = ('bob', q,))
p.start()
ret = q.get()
p.join()
p2 = Process(target = mc.target_func, args = ('tom', q,))
p2.start()
ret = q.get()
p2.join()
我希望打印出来的是
Hello bob
1
Hello tom
2
但实际上,打印输出是
Hello bob
1
Hello tom
1 <------------------ Why it's not 2?
我可以知道我做错了什么吗?
May I know what am I wrong?
非常感谢.
推荐答案
target_func
. mc
复制到每个子进程;不能在进程之间共享.
target_func
is called in separated process. mc
is copied to each subprocess; not shared between processes.
使用线程,您将获得预期的结果.为了安全起见,您应该使用锁;我在以下代码中省略了它.
Using Thread, you will get expected(?) result. For safety you should use lock; I omitted it in following code.
from threading import Thread
from Queue import Queue
....
if __name__ == '__main__':
mc = myClass()
q = Queue()
p = Thread(target = mc.target_func, args = ('bob', q,))
p.start()
ret = q.get()
p.join()
p2 = Thread(target = mc.target_func, args = ('tom', q,))
p2.start()
ret = q.get()
p2.join()
这篇关于使用python更改线程中的对象值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文