Sam*_*her 7 python messaging multithreading
有没有人知道如何在不使用全局变量的情况下在此代码中从threadOne向threadTwo发送变量(或获取变量)?如果没有,我将如何操作全局变量?只需在两个类之前定义它并在run函数中使用全局定义?
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()
Run Code Online (Sandbox Code Playgroud)
谢谢
gak*_*gak 17
您可以使用队列以线程安全的方式在线程之间发送消息.
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
Run Code Online (Sandbox Code Playgroud)
给你,使用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()
Run Code Online (Sandbox Code Playgroud)
使用全局变量data。
第一个线程获取锁并写入变量。
第二个线程等待数据并打印它。
更新
如果您有两个以上的线程需要传递消息,最好使用threading.Condition.
| 归档时间: |
|
| 查看次数: |
18359 次 |
| 最近记录: |