可以同时运行两个无限循环吗?

时间:2016-04-25 17:59:21

标签: python loops

我希望能够同时运行两个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'

提前致谢

2 个答案:

答案 0 :(得分:6)

要一次运行两个循环,您需要使用两个线程或将循环交错。

方法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 :(得分:1)

虽然Brian的答案已经涵盖,但Python的生成器函数(以及yield的神奇之处)允许使用两个实际循环并且没有线程的解决方案:

import Data.Monoid
compose :: (Functor t, Foldable t) => t (a -> a) -> a -> a
compose = appEndo . foldl1 (<>) . fmap Endo

这里,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 .... a()中的两个循环真正是交错的,即在每次迭代中,执行在两者之间来回传递。