Python中如何持续执行代码直到另一函数返回指定值?
问题根因
当前代码是单线程同步执行模式:主循环打印一次Running后就会同步调用foo(),而foo()内部的sleep(3)会直接阻塞整个主线程,这3秒内程序无法执行任何其他操作(包括继续打印),必须等foo()执行完毕返回结果后,才会继续走后续判断逻辑,自然做不到持续输出Running的效果。
修复方案
把耗时阻塞的foo()放到独立的后台子线程执行,主线程不受阻塞保持循环打印Running,同时定期检查foo()的执行状态,等它返回True时就打印结束提示并退出循环。
修复后可直接运行的代码:
from time import sleep import threading foo_return = None def foo(): sleep(3) return True def async_foo(): global foo_return foo_return = foo() # 启动守护线程执行foo,主线程退出时子线程自动终止 threading.Thread(target=async_foo, daemon=True).start() while True: print('Running') # 加100ms间隔避免无意义的高频打印占满CPU sleep(0.1) if foo_return is True: print('Finished.') break
运行这段代码会看到程序持续打印Running,3秒后自动打印一次Finished然后退出,完全符合预期效果。
内容的提问来源于stack exchange,提问作者Sakib
相关产品推荐
相关产品推荐

