我在这个python脚本中犯了什么错误?

时间:2016-06-28 20:49:38

标签: python multithreading python-2.7

我尝试使用多线程,所以我可以更好地使用它,但由于一些奇怪的原因,我的代码不想遵循命令。它假设进入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))

3 个答案:

答案 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后暂停主线程。