2016-06-28 4 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

あなたが見ている出力は何ですか?何もない?また、どのOS上のPythonのどのバージョン? –

答えて

1

下にこれを追加します。

while True: 
    pass 

問題は、あなたのメインプログラムの下をオフに実行しているということです。これにより、実行セッション全体が終了します。

+0

これはCPUを食べる無限ループです。 – quantummind

+0

右...それは単なるイラストです。あなたの反応は明確な改善です。 – Prune

0

あなたはどちらかのプルーンがここで提案し何ができるか、DisplayA、DisplayBとDisplayCを開始した後、メインスレッドを一時停止することができます。

+0

メインスレッドを中断する方法を表示できますか? –

+0

私はPythonであまりスレッディング使用していないが、これはあなたを助けるかもしれない:http://stackoverflow.com/questions/529034/python-pass-or-sleep-for-long-running-processes –

1

迅速かつ短いソリューション:それはCPUを食べるため

while True: 
    time.sleep(1) 

は、whileループでパスを使用しないでください。 何もしない高価な方法。

あなたは、より一般的なソリューションをしたい場合は、あなたがスレッドからトレッドをインポートすることができ、その後、あなたが参加し使用することができます。

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

をスレッドが無限に実行していない場合は、このソリューションはまた働き、あなたのプログラムを継続することができますスレッドが終了した後

関連する問題