两个无限循环交替?

Mar*_*zyk 0 python multithreading python-multithreading python-3.x

我正在寻找这个问题的解决方案:

我有两个功能:

def foo1():
    while True:
        print("x")

def foo2():
    while True:
        print("y")
Run Code Online (Sandbox Code Playgroud)

我想交替运行它们,如:

  1. 运行foo1()
  2. 停止foo1()运行foo2()
  3. 停止foo2()运行foo1()

功能不能同时工作,目前只有其中一个可以工作.

Pau*_*zer 5

编辑:留给@StefanPochmann拍下我漂亮的答案:这个问题无关紧要,但肯定值得一提的是,拉链可以成对配对.因此,虽然您可以alter在奇数次迭代后正式暂停下面定义,但此时'y'将已经打印出来.

如果您关心这个问题,那么Stefan的解决方案也是如此

>>> alter = map(next, it.cycle((foo1(), foo2())))
Run Code Online (Sandbox Code Playgroud)

这其实非常聪明.

编辑结束

您可以将函数转换为生成器,然后压缩它们.

>>> import itertools as it
>>>
>>> def foo1():
...     while True:
...         print("x")
...         yield None
... 
>>> def foo2():
...     while True:
...         print("y")
...         yield None
... 
>>> alter = it.chain.from_iterable(zip(foo1(), foo2()))
>>> while True:
...     next(alter)

x
y
x
y
...
Run Code Online (Sandbox Code Playgroud)

要么:

>>> for a in alter:
...     pass

x
y
x
y
...
Run Code Online (Sandbox Code Playgroud)