如何在两个线程之间共享变量

13 投票
1 回答
37451 浏览
提问于 2025-04-17 19:24

在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值放进了队列,而另一个线程则把这个值绑定到一个局部变量(而且这个变量是不同的)上,虽然它们的名字是一样的。当然,它也可以用其他名字。

撰写回答