我有点怀疑是否有人能解决我的问题,并创建成功的线程之间的通信。你知道吗
第一个例子,这是它应该如何工作,但工作不好:
import Queue,threading,time
class th(threading.Thread):
def __init__(self,q):
threading.Thread.__init__(self)
self.q = q
self.t = time
def run(self):
for i in range(5):
self.q.put(i)
self.t.sleep(0.5) # <----------
self.q.put('end')
class main(object):
def __init__(self):
self.q = Queue.Queue()
self.thread = th(self.q)
self.thread.setDaemon(True)
self.thread.run()
self.call()
def call(self):
while True:
recv = self.q.get();
if recv == 'end':
break
else:
print recv
if __name__ == '__main__':
root = main()
root.call()
在本例中,所有打印都同时进行: 0,1,2,3,4
第二个例子:
import Queue,threading,time
class th(threading.Thread):
def __init__(self,q):
threading.Thread.__init__(self);
self.q = q
self.t = time
def run(self):
for i in range(5):
self.q.put(i) # <------ no sleep()
self.q.put('end')
class main(object):
def __init__(self):
self.q = Queue.Queue()
self.thread = th(self.q)
self.thread.setDaemon(True)
self.thread.run()
self.call()
def call(self):
while True:
recv = self.q.get()
if recv == 'end':
break
else:
print recv
if __name__ == '__main__':
root = main()
root.call()
代码按需要打印 0, 1 2 三 4个
一对一
sleep
函数有没有以同样的方式运行?你知道吗
您不希望直接调用线程上的^{} 方法。改为调用^{} ,这将启动子线程,子线程将依次运行
run
方法。你知道吗当前代码基本上是单线程的,因为
run
调用代替父线程中的子线程。子线程从未真正启动!(您还调用了main.call
方法两次,我希望它能阻止或引发异常,但这是另一个问题。)对不起,这是一个非常简单的东西,非常简单,只是需要替换
由
相关问题 更多 >
编程相关推荐