我尝试使用多线程,所以我可以更好地使用它,但由于一些奇怪的原因,我的代码不想遵循命令。它假设进入while循环并打印,但它没有,并且它也没有引发任何错误,那么哪些行是错误的?
#!/usr/bin/env python
#
#
#
import random
import thread
import time
import sys
import os
def DisplayA(name,wait):
while True:
print 'Display: 1';time.sleep(wait)
def DisplayB(name,wait):
while True:
print 'Display: 2';time.sleep(wait)
def DisplayC(name,wait):
while True:
print 'Display: 3';time.sleep(wait)
thread.start_new_thread(DisplayA,('Display1',2))
thread.start_new_thread(DisplayB,('Display2',3))
thread.start_new_thread(DisplayC,('Display3',5))
答案 0 :(得分:1)
将其添加到底部:
while True:
pass
问题是你正在运行主程序的底部。这将终止整个执行会话。
答案 1 :(得分:1)
快速简短的解决方案:
while True:
time.sleep(1)
不要在while循环中使用pass,因为它会占用CPU。 昂贵的无所事事的方式。
如果您想要更通用的解决方案,那么您可以从线程导入Tread,然后您可以使用join:
from threading import Thread
...
p1 = Thread(name="A", target=DisplayA, args=('Display1',2))
p2 = Thread(name="B", target=DisplayB, args=('Display2',3))
p3 = Thread(name="C", target=DisplayC, args=('Display3',5))
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
如果线程没有无限运行,这个解决方案也可以工作,并且你的程序可以在线程完成后继续。
答案 2 :(得分:0)
您可以执行Prune此处建议的操作,也可以在启动DisplayA,DisplayB和DisplayC后暂停主线程。