我需要实现一个异步定时器来观察'执行一系列功能,直到计时器到期为止。但问题是函数执行是一个阻塞调用,在这种情况下,如果函数需要很长时间才能恢复,我该如何跟踪定时器。
functions = [func_1, func_2, func_3, func_n]
timer = Timer(30) # timer of 30 sec, just for example.
while timer.expires():
for func in functions:
func() # what if this function runs for a min
我希望尽可能避免多线程和多处理,但如果多处理/线程是唯一的出路,那么请提供这些解决方案。
python中有哪些不同的方法可以实现异步行为。
答案 0 :(得分:1)
如果您调用的函数因IO而阻塞,则可以使用asyncio模块将其转换为非阻塞。此时,您将它们包装到将来并为其完成设置超时。请记住,超时仅考虑IO。
如果函数因CPU绑定作业而被阻塞(循环,长计算),则无法在不使用进程的情况下实现这一功能。