2016-04-25 183 views
3

我希望能够同时运行两个while True循环。 这可能吗?可以同时运行两个无限循环吗?

我对Python非常陌生,所以我不知道如何解决这个问题。

这是我做的代码:

import time 

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

infiniteLoop() 

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

现在,它只是打印出“循环1”

在此先感谢

+10

您需要两个线程来运行两个循环。 – sobolevn

+1

为什么你想要两个独立的循环同时运行? –

+0

正如你使用'time.sleep'而不是更复杂的框架,如扭曲或龙卷风,你是绑在使用线程。 –

回答

5

同时运行两个循环,你要么需要使用两个线程或将循环交错在一起。

方法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魔术)允许与两个实际的环的解决方案,无线程:

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 
.... 

这里,中的两个循环和b()确实是交错的,因为在每次迭代中,执行都在两者之间来回传递。

+0

非常相似,我把第一个方法;) – Brian

+0

是的,没有。你的第一个解决方案只有一个循环(有两个'print'语句)。 – schwobaseggl