假设我想要一个程序Foo.py
,它有一些任意例程Bar()
,Quux()
和Fizz()
。假设从程序角度来看,通常的执行顺序应为Bar() -> Quux() -> Fizz()
。但是,Fizz()
应根据某些运行时操作有条件地调用函数Buzz()
,并且在Buzz()
期间随时调用Fizz()
应将该过程返回到Quux()
。
我非常了解如何使用系统调用在程序集中实现并发进程,具体取决于体系结构,但我可以在Python中使用哪些选项,我不能 - 而且坦率地不愿意 - 使用批量跳转并直接移动指令指针?在搜索答案时,我发现循环和递归作为返回程序的建议。我不认为循环可以在不停止Fizz()
进程等待Buzz()
的条件检查的情况下工作,并且我不确定在这种情况下如何实现递归。 (我的Buzz()
就像是GUI上的“后退”按钮。
答案 0 :(得分:1)
你在这里不需要任何东西。通常的结构化编程工具可以正常工作。致电Fizz
后Buzz
返回,并让它返回指示是否返回Quux
的指示符:
Bar()
while True:
Quux()
if not Fizz():
break
(如果Buzz
唯一的效果应该是将执行权恢复为Quux
,则根本不会有Buzz
并返回。)< / p>
答案 1 :(得分:0)
也许如下所示。 Fizz
循环,直到某些条件唤起对Buzz
的调用。触发调用的相同检查会中断循环。
import random
def Buzz():
print ("Buzz")
def Fizz():
print ("Fizz")
while True:
flip = random.random()
print (" ", flip)
if flip <= 0.5:
Buzz()
break
def Quux():
print ("Quux")
Fizz()
print ("Back in Quux")
def Bar():
print ("Bar")
Quux()
Bar()
输出:
Bar
Quux
Fizz
0.88313135192614
0.9782005471906149
0.6899740417799126
0.724911154764598
0.6193573809551899
0.3713918176393549
Buzz
Back in Quux
答案 2 :(得分:0)
使用协同程序(多线程)将提供所需的并发功能。来自问题的评论和user2357112的回答。