2016-04-25 25 views
3

while Trueループを2つ同時に実行したいと考えています。 これは可能でしょうか?2つの無限ループを一度に実行できますか?

私はPythonにとって非常に新しいので、この問題を回避する方法はわかりません。

これは私が作ったコードです。今

import time 

def infiniteLoop(): 
    while True: 
     print('Loop 1') 
     time.sleep(1) 

infiniteLoop() 

while True: 
    print('Loop 2') 
    time.sleep(1) 

、それだけで「ループ1」一度に両方のループを実行するには、事前

+10

2つのループを実行するには2つのスレッドが必要です。 – sobolevn

+1

なぜ、2つの別々のループを同時に実行したいのですか? –

+0

ねじれや竜巻のようなもっと複雑なフレームワークの代わりに 'time.sleep'を使っているので、あなたはスレッドを使うように結ばれています。 –

答えて

5

おかげで、あなたのいずれかの必要性を印刷します2つのスレッドを使用するか、ループを一緒にインターリーブします。

方法1:

import time 
def infiniteloop(): 
    while True: 
     print('Loop 1') 
     time.sleep(1) 
     print('Loop 2') 
     time.sleep(1) 

infiniteloop() 

方法2:

import threading 
import time 

def infiniteloop1(): 
    while True: 
     print('Loop 1') 
     time.sleep(1) 

def infiniteloop2(): 
    while True: 
     print('Loop 2') 
     time.sleep(1) 

thread1 = threading.Thread(target=infiniteloop1) 
thread1.start() 

thread2 = threading.Thread(target=infiniteloop2) 
thread2.start() 
+1

ありがとう!本当に助けて! –

+0

'target = infiniteloop1()'の代わりに 'target = infiniteloop1'でなければなりません。infiniteloop2と同じ –

+0

ありがとう@Francisco。ちょうど編集 – Brian

1

ブライアンの答えはあなたがカバーしているが、Pythonのジェネレータ機能(およびyieldの魔法)2つの実際のループを持つソリューションを可能にし、スレッドなしで:

def a(): 
    while True: # infinite loop nr. 1 (kind of) 
     print('Loop 1') 
     yield 

def b(): 
    for _ in a(): # infinite loop nr. 2 
     print('Loop 2') 

> b() 
Loop 1 
Loop 2 
Loop 1 
Loop 2 
.... 

ここでは、の2つのループとb()は、各反復で実行が2つの間で前後に渡されるという意味で真にインターリーブされます。

+0

私は置く最初の方法に非常に似て;) – Brian

+0

はい、いいえ。あなたの最初の解決策はループを1つしか持たない(2つの 'print'ステートメントで)。 – schwobaseggl

関連する問題