【问题标题】:Asynchronous Timer Implementation in PythonPython中的异步定时器实现
【发布时间】:2015-07-14 11:46:48
【问题描述】:

我需要实现一个异步计时器来“监视”函数列表的执行,直到计时器到期。但问题是函数执行是一个阻塞调用,在这种情况下,如果函数需要太长时间才能恢复,我该如何跟踪计时器。

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

【问题讨论】:

  • 澄清一下,是每个函数都有完整的 30 秒运行时间,还是您有 30 秒的时间来运行整个列表?
  • 计时器持续时间适用于列表中的所有功能。

标签: python python-multiprocessing python-asyncio


【解决方案1】:

如果你调用的函数由于 IO 阻塞,你可以使用 asyncio 模块将它们变成非阻塞。此时,您将它们包装到未来并设置它们完成的超时时间。请记住,超时仅考虑 IO。

如果函数由于 CPU 绑定作业(while 循环、长时间计算)而阻塞,则不使用进程就无法实现。

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 2016-11-18
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多