2016-06-28 44 views
-1

我想玩多线程,所以我可以做得更好,但由于一些奇怪的原因,我的代码不想遵循命令。它假设进入while循环并打印,但它不会,并且也不会产生任何错误,所以哪些行是错误的?我在这个python脚本中犯了什么错误?

#!/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

这从我的终端正常工作...... ... –

+0

你看到的输出是什么?一点都没有?另外,哪个版本的Python,在哪个操作系统上? –

回答

1

一下添加到底部:

while True: 
    pass 

的问题是,你运行了你的主程序的底部。这会终止整个执行会话。

+0

这是一个吞噬CPU的无限循环。 – quantummind

+0

对......这只是一个简单的例子。你的回应是一个明显的改进。 – Prune

0

您可以执行Prune在此处建议的操作,也可以在启动DisplayA,DisplayB和DisplayC后暂停主线程。

+0

你能展示如何挂起主线程吗? –

+0

我没有在Python中使用线程,但是这可能对你有所帮助:http://stackoverflow.com/questions/529034/python-pass-or-sleep-for-long-running-processes – 2016-06-28 21:25:29

1

快速和简短的解决方案:

while True: 
    time.sleep(1) 

不要在while循环使用合格的,因为它吃CPU。 昂贵的无所作为的方式。

如果你想要一个更通用的解决方案,那么你可以从线程导入花纹,那么你可以使用加入:

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() 

此解决方案也如果线程不运行无止境的,你的程序可以继续线程完成后。

相关问题