12

在 Windows 上使用 Python 2.7.3。

如何num在线程之间共享变量,以便在num平方后打印?

我意识到我需要了解线程是如何工作的,但是文档没有太多,我也没有在这里找到任何东西。
那么,有人可以解释线程如何工作以及如何在 2 个线程之间共享变量吗?

我的代码(继续打印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()
4

1 回答 1

29

这个问题的一般答案是队列:

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 的值放入队列,另一个线程将此值绑定到同名的本地(因此不同)变量。但它当然可以使用任何名称。

于 2013-03-17T13:58:12.550 回答