问题标签 [apscheduler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
33328 浏览

python - 如何在 Python Flask 框架中运行循环任务?

我正在建立一个网站,为访问者提供一些信息。此信息通过每 5 秒轮询几个外部 API 在后台汇总。我现在的工作方式是使用APScheduler作业。我最初更喜欢 APScheduler,因为它使整个系统更容易移植(因为我不需要在新机器上设置 cron 作业)。我按如下方式启动轮询功能:

这有点工作,但它有一些问题:

  1. 对于初学者来说,这意味着间隔作业在 Flask 上下文之外运行。到目前为止,这还不是什么大问题,但是当调用端点失败时,我希望系统向我发送一封电子邮件(说“嘿,调用 API X 失败”)。但是,因为它不在 Flask 上下文中运行,所以它抱怨无法执行 Flask -mail ( RuntimeError('working outside of application context'))。
  2. 其次,我想知道当我不再使用 Flask 内置调试​​服务器,而是使用 4 个工作人员的生产服务器时,这将如何表现。那么它会启动每项工作四次吗?

总而言之,我觉得应该有更好的方法来运行这些重复性任务,但我不确定如何。有没有人有这个问题的有趣解决方案?欢迎所有提示!

[编辑] 我刚刚阅读了有关Celery及其时间表的信息。虽然我并没有真正看到 Celery 与 APScheduler 有何不同以及它是否可以解决我的两点,但我想知道是否有人读到这篇文章认为我应该对 Celery 进行更多调查?

[结论] 大约两年后,我读到了这篇文章,我想我可以让你们知道我最终得到了什么。我认为@BluePeppers 说我不应该与 Flask 生态系统如此紧密地联系是对的。所以我选择了使用 Ansible 设置的每分钟运行的常规 cron 作业。尽管这使它变得更复杂(我需要学习 Ansible 并转换一些代码,以便每分钟运行一次就足够了),但我认为这更健壮。我目前正在使用很棒的pythonr-rq来排队异步作业(检查 API 和发送电子邮件)。我刚刚发现了rq-scheduler。我还没有测试过它,但它似乎正是我首先需要的。所以也许这对这个问题的未来读者来说是一个提示。

剩下的,我只祝大家有个美好的一天!

0 投票
2 回答
4175 浏览

python - 保持 Python 脚本运行的最佳方法?

我正在使用 APScheduler 运行一些重复性任务,如下所示:

因为这个脚本结束时间隔作业结束,所以我只是添加了结束while True循环。我真的不知道这是否是最好的,更不用说pythonic方式来做到这一点了。有没有“更好”的方式来做到这一点?欢迎所有提示!

0 投票
1 回答
681 浏览

mongodb - APScheduler 在 mongodb 的自定义数据库中存储作业

我想使用 python 将作业存储在 mongodb 中,它应该在特定时间安排。

我做了谷歌搜索,发现 APScheduler 可以。我下载了代码并尝试运行代码。

它正确地安排了作业并运行它,但是它将作业存储在 mongodb 的 apscheduler 数据库中,我想将作业存储在我自己的数据库中。

请告诉我如何将作业存储在我自己的数据库而不是默认数据库中。

0 投票
1 回答
3605 浏览

python - apscheduler 间隔任务未运行

我希望每天早上 6 点完成我的主要任务。但出于测试目的,我将间隔设置为 5 秒。问题是它似乎永远不会触发。我在 maintask 方法中有一个断点,该断点从未到达,并且没有任何内容打印到控制台。我假设它没有运行。

ETA:我的代码到达 scheduler.start() 因为它被阻塞而停止。它应该在 5 秒内启动我的主要任务,但它永远不会。

python版本是2.7 apscheduler版本是3.0

我已经在 Windows 和 Debian 上运行它,结果相同。

这是我的代码。

0 投票
1 回答
6170 浏览

python - 调度程序不工作。导入错误:未找到名为 Scheduler 的模块

我在尝试运行代码时遇到导入错误。未找到调度程序模块。当我尝试通过使用绕过错误时backgroundScheduler(),我发现它不支持类似 cron 的作业调度,即add_cron_job. 我哪里错了?

0 投票
1 回答
422 浏览

python - 类内的python时间实例未在调用时更新

我有一个小脚本可以轮询数据库以查找某些作业的状态。我决定使用 APScheduler 来处理循环调用。如果花费太长时间,我创建了一个装饰器来使函数超时。我在这里遇到的问题是装饰器在一个类中,即使我在两个不同的函数中创建了该类的两个实例,它们总是具有相同的 start_time。我想也许如果我在我的类中移动装饰器并在 init 调用中初始化 start_time 它会更新类的每个实例的 start_time。当我移动类的装饰器并分配 self.start_time = datetime.now() 时,开始时间会在每次调用类时更新,因此永远不会超时。类内部装饰器的示例也在下面。

尝试在类内移动装饰器:

这是我使用上述装饰器时的示例输出。

start_time 需要保持不变,否则我不能使函数超时。

0 投票
1 回答
1733 浏览

post - 将 python 字典作为输入字段发布到表单上

我正在编写一个应用程序,它允许用户设置 python 脚本以设定的时间间隔运行。我将 APSCheduler 与 SQLAlchemy 结合使用作为数据源,并将 Flask 用于我的 Web UI。

我有一个带有以下标记的屏幕,用于设置作业:

此表单“提交”按钮触发以下脚本,将记录添加到数据库

APScheduler 有许多关键字段:

  • Function:要调度的函数的详细信息(例如:JOBS.TestJob:Test运行JOBS文件夹下Testjob.py文件中的Test函数)。
  • args:提供给函数的函数列表。
  • kwargs:提供给函数的函数字典。

不幸的是,当 args 和 kwargs 为空白时,虽然输入屏幕工作正常,但如果您尝试输入任何参数,我会收到错误消息。例如,如果我的 Test 函数需要一个参数“Abbrev”并且我在 kwargs 字段中输入 {"Abbrev":"Test1"}:

有人能指出我正确的方向吗?我不确定这是否是我的 python 中的错误,我是否需要使用普通 HTTP POST 请求(JSON?)以外的东西来发送数据。

0 投票
0 回答
284 浏览

python - 如何保持高级 Python 调度脚本运行?

我已经安装了 Advanced Python Scheduler 并创建了一个小脚本,其中创建了一些任务。

现在为了简单的执行,我可以在终端使用启动脚本python clock.py,它会运行良好。但是一旦我关闭终端,它就消失了。

那么,如何在后台运行此脚本?我知道对于简单的任务python clock.py &是一种方法。

但我需要为 Web 应用程序安排任务,并希望这些任务在未来 1 年或更长时间内保持运行。

Ubuntu 中有哪些可用选项?

我如何将它作为守护进程或在后台运行?

有没有办法检查它的进度?

0 投票
3 回答
2633 浏览

apscheduler - 间隔 90 秒的调度程序?

是否可以将 apscheduler cron 作业设置为以 90 秒的间隔运行?(我有 40 台机器,我想在一个小时内均匀地安排它们,而不将时间信息硬编码到脚本中)。我尝试过各种这样的:

0 投票
1 回答
1670 浏览

python - 如何使用更多信息记录 APScheduler 警告?

我正在使用Python APScheduler运行一堆重复性任务,但是对于几个任务,我现在遇到错误,例如:

警告:apscheduler.scheduler:执行作业“getAndStoreExchangeRate(触发器:cron [minute='*'],下次运行时间:2014-11-06 18:48:00 CET)”已跳过:已达到最大运行实例数(1 )

除此之外,这个 APscheduler 实例的内存使用量在运行大约十天后突然上升,从大约 47MiB 到 1200MiB,之后由于机器内存不足,各种进程停止。

因此,要找到问题的根源,我需要准确了解哪些调用会导致这些警告。据我了解,发生此错误是因为上一个呼叫(此呼叫前一分钟)尚未结束。但是,此错误中的信息相当模糊。函数的名称是 ( getAndStoreExchangeRate),但我有多个文件,其中的函数名称如下。所以我想知道的是:

  • 这个函数在哪个文件的哪一行出现警告?
  • 这个函数有哪些参数?

有人知道我如何在某处记录这些信息吗?欢迎所有提示!

[编辑]

因此,我将 BackgroundScheduler 子类化并覆盖了_process_jobs()我在此代码段中更改 self._logger.warning 的方法:

对此:

这样做的原因是它向我显示了给函数的参数,但我仍然不知道最重要的事情:在哪个文件中以及在哪一行上定义了发生警告的这个函数。有谁知道我怎么能证明这一点?