如何在两个线程之间共享变量
在Windows上使用Python 2.7.3。
我想知道怎么在多个线程之间共享一个变量num
,让它在被平方后能被打印出来。
我意识到我需要了解线程是怎么工作的,但文档里没有太多信息,我在这里也没找到相关内容。
所以,有人能解释一下线程是怎么工作的吗?还有,怎么在两个线程之间共享变量呢?
我的代码(一直打印2
)
import threading
def func1(num):
while num < 100000000:
num = num**2
def func2(num):
while num < 100000000:
print num,
num = 2
thread1 = threading.Thread(target=func1,args=(num,))
thread2 = threading.Thread(target=func2,args=(num,))
print 'setup'
thread1.start()
thread2.start()
1 个回答
30
这个问题的一般答案是使用队列:
import threading, queue
def func1(num, q):
while num < 100000000:
num = num**2
q.put(num)
def func2(num, q):
while num < 100000000:
num = q.get()
print num,
num = 2
q = queue.Queue()
thread1 = threading.Thread(target=func1,args=(num,q))
thread2 = threading.Thread(target=func2,args=(num,q))
print 'setup'
thread1.start()
thread2.start()
打印
=== pu@pumbair:~/StackOverflow:507 > ./tst.py
setup
4 16 256 65536 4294967296
注意在这段代码中,num是func1和func2里的一个局部变量,它们之间没有任何关系,除了它们都接收了全局变量num的初始值。所以这里的num并不是共享的。实际上,一个线程把它的num值放进了队列,而另一个线程则把这个值绑定到一个局部变量(而且这个变量是不同的)上,虽然它们的名字是一样的。当然,它也可以用其他名字。