我希望能够同时运行两个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'
提前致谢
答案 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()
中的两个循环真正是交错的,即在每次迭代中,执行在两者之间来回传递。