有人知道如何在不使用全局变量的情况下在此代码中从threadOne向threadTwo发送变量(或获取变量)吗?如果没有,我将如何操作全局变量?只需在两个类之前定义它并在运行函数中使用全局定义吗?
import threading
print "Press Escape to Quit"
class threadOne(threading.Thread): #I don't understand this or the next line
def run(self):
setup()
def setup():
print 'hello world - this is threadOne'
class threadTwo(threading.Thread):
def run(self):
print 'ran'
threadOne().start()
threadTwo().start()
由于
答案 0 :(得分:17)
您可以使用queues以线程安全的方式在线程之间发送消息。
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
答案 1 :(得分:4)
在这里,您可以使用Lock
。
import threading
print "Press Escape to Quit"
# Global variable
data = None
class threadOne(threading.Thread): #I don't understand this or the next line
def run(self):
self.setup()
def setup(self):
global data
print 'hello world - this is threadOne'
with lock:
print "Thread one has lock"
data = "Some value"
class threadTwo(threading.Thread):
def run(self):
global data
print 'ran'
print "Waiting"
with lock:
print "Thread two has lock"
print data
lock = threading.Lock()
threadOne().start()
threadTwo().start()
使用全局变量data
。
第一个线程获取锁并写入变量。
第二个线程等待数据并打印出来。
<强>更新强>
如果您有两个以上的线程需要传递消息,最好使用threading.Condition
。