python - 使用python sched模块和enterabs使函数在特定时间运行

标签 python scheduler

我似乎找不到如何在 Python 中安排事件的简单示例。

我希望能够将日期和时间字符串作为参数传递到函数中。

例如:

字符串:“m/d/Y HH:MM”将设置代码执行后 future 函数运行的时间。所以,就像一个在我运行后等待关闭的函数。

似乎主要问题是正确格式化字符串,但一个简单的示例确实有助于了解如何“安排”函数运行。

最佳答案

你没有提供足够的上下文来理解你想在更大的框架中做什么 - 但是,一般来说 - “这不是它在 Python 中的工作方式”。

“普通”Python 程序是一个单线程、同步程序 - 它将运行一个任务,一个又一个,然后又一个,当一切完成后,程序退出,解释器也随之退出。

所以,一些东西(带有虚构的“时间表”功能):

def main():
    print("Hello World")
    schedule(60, main)

main()

如果对 Schedule 的调用立即返回,则在 Python 中不起作用 - 主函数将退出,程序将在 main() 调用后尝试恢复,然后终止。需要有一段代码保持运行,它可以计算时间和延迟,可能接收网络或用户生成的事件,并将它们分派(dispatch)到先前安排的回调函数,以便程序继续运行。

这样一段可以计算时间和调度调用的代码通常被称为“ react 器”——并且在普通的 Python 程序中没有任何代码可以运行。与 JavaScript 程序不同,浏览器或其他 JavaScript 环境默认提供此类托管。

这就是为什么大多数 Python Web 或网络框架、所有 GUI 工具包都提供这样一个核心 - 它通常在一个主脚本的末尾调用,是一个名为 mainloop 的方法或函数或serve_foreverstart 等等。从那时起,您的主脚本(已设置适当的回调、计划的事物等)将停止 - react 器将是调用事物的代码段。

这就是我说你的问题错过了你想要做的事情的背景:起初你只是想测试一些调度 - 但后来你会想要在一个更大的系统中进行 - 该系统应该使用适当的框架来构建对于您手头的“实际任务”,例如 Django、tornado、pyramid(如果是 Web 服务器系统)、gtk、Qt、Tk(如果是 GUI 程序)、PyOgre、kivy、pyglet(如果是多媒体程序),扭曲为另一个协议(protocol)的通用网络服务器,或者其他一些东西,比如 celery 或 camaelia - 这些只是一般的例子。

也就是说,Python 的标准库确实提供了一个“通用”调度程序函数 - 它确实实现了这样一个循环,并且具有核心功能。如果您没有做其他事情,也没有什么花哨的事情,它会阻塞在那里,直到到达调用预定函数的时间,此时它将退出,并恢复对主程序的控制。如果您调用的函数安排了其他事情,它将继续运行,依此类推。

请参阅以下位置的文档和示例: http://docs.python.org/2/library/sched.html

您可以使用 datetime 模块中的函数而不是 time.time 来根据您的要求设置 r 绝对计时。另请检查 threading.Timer 的文档 - 如果您想在给定的延迟后运行一个简单的函数,与正在运行的任何其他代码并行,那么它可以以一种天真的方式或多或少地完成您的想法。不想将您的应用程序重写为基于事件的 - 但正如它可能看到的那样简单,它在较大的系统中会有许多缺点 - 您应该选择列出的框架之一。

关于python - 使用python sched模块和enterabs使函数在特定时间运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15594956/

相关文章:

javascript - 困在 JavaScript 中

Python CGI 抛出 500 内部服务器错误

python - 生成一个序列,将前一个元素保存在下一个元素python中

python - 为什么 Python 哈希列表不使用 ID?

python - 使用 Selenium 选择具有特定内容的 anchor

dart - Dart 有调度器吗?

linux - Ubuntu 中的动态进程调度

python - 我怎样才能让我的 gradle 测试任务对不在 maven central 上的库使用 python pip install?

jakarta-ee - JBoss AS 7.1 - 使用 @Schedule 注释运行计划

drupal - 更改使用模块调度器时将发布的内容列表