python中的非阻塞事件调度

Posted

技术标签:

【中文标题】python中的非阻塞事件调度【英文标题】:Non blocking event scheduling in python 【发布时间】:2015-01-27 05:45:34 【问题描述】:

是否可以在 python 中安排一个函数在每 xx 毫秒执行一次,而不阻塞其他事件/不使用延迟/不使用睡眠?

What is the best way to repeatedly execute a function every x seconds in Python? 解释了如何使用 sched 模块执行此操作,但该解决方案会在等待时间(如睡眠)阻塞整个代码执行。

像下面给出的简单调度是非阻塞的,但调度只工作一次——重新调度是不可能的。

from threading import Timer
def hello():
    print "hello, world" 

t = threading.Timer(10.0, hello)
t.start() 

我在安装了 Raspbian 的 Raspberry pi 中运行 python 代码。有没有办法以非阻塞方式调度函数或使用操作系统的“某些功能”触发它?

【问题讨论】:

【参考方案1】:

您可以通过在回调函数中启动另一个 Timer 来“重新安排”事件:

import threading

def hello():
    t = threading.Timer(10.0, hello)
    t.start()
    print "hello, world" 

t = threading.Timer(10.0, hello)
t.start() 

【讨论】:

@RodrigoRodrigues 是的 你如何阻止它

以上是关于python中的非阻塞事件调度的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 中的事件循环和 Node.js 中的异步非阻塞 I/O 有啥区别?

在 verilog中的非阻塞赋值在啥时候赋值时刻结束?

在python中解析(流式传输)XML的非阻塞方法

4.NIO的非阻塞式网络通信

Node - 浅谈对非阻塞I/O事件循环的理解

非阻塞django? [关闭]