Python中的异步计时器实现

时间:2015-07-14 11:46:49

标签: python python-multiprocessing python-asyncio

我需要实现一个异步定时器来观察'执行一系列功能,直到计时器到期为止。但问题是函数执行是一个阻塞调用,在这种情况下,如果函数需要很长时间才能恢复,我该如何跟踪定时器。

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中有哪些不同的方法可以实现异步行为。

1 个答案:

答案 0 :(得分:1)

如果您调用的函数因IO而阻塞,则可以使用asyncio模块将其转换为非阻塞。此时,您将它们包装到将来并为其完成设置超时。请记住,超时仅考虑IO。

如果函数因CPU绑定作业而被阻塞(循环,长计算),则无法在不使用进程的情况下实现这一功能。