【问题标题】:Python Pyramid periodic taskPython Pyramid 周期性任务
【发布时间】:2015-02-18 13:17:29
【问题描述】:

我的问题是关于如何在 Pyramid Python 框架中执行一个简单的任务?

我有一张包含用户生日的表格,我想每天检查某人的生日是否即将到来,如果是,则打印一个简单的问候语。

所以我在views.py中定义了一些东西:

def print_greetings():
   tomorrow = datetime.date.today()+datetime.timedelta(days=1)
    users = sess.query(User).filter(func.DATE_FORMAT(User.bday, "%d_%m")==tomorrow.strftime("%d_%m")).all()
    if len(users) > 0:
        for u in users:
            print("Happy Birthday", u.name)

所以问题是: 我应该如何以及在哪里写一些东西来每天执行一次这个函数?

UPD:我需要从 Pyramid 应用程序运行任务,像 cron 这样的外部工具不是我要找的东西。

也许某种计时器会执行 print_greetings()?并且在执行之后会启动一个新的定时器实例?

【问题讨论】:

  • 使用你的“in Pyramid”方法,一旦你超越了在你的开发机器上使用 pserve 服务应用程序,事情会变得有点有趣。生产网络服务器通常会产生多个“工作”进程/线程,然后可以随时终止或重新产生。除了正常的请求/响应周期之外,工作人员实际上不应该做任何事情。

标签: python scheduled-tasks pyramid


【解决方案1】:

虽然 Celery 对于此类任务来说是一个相当“重量级”的解决方案,但我建议使用 APScheduler。您可以像在 cron 中一样设置调度程序,但它将在您的应用程序中运行。在这种情况下,内存中的作业存储工作正常。

import atexit
from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()
scheduler.start()
scheduler.add_job(print_greetings,
    id='greetings', 
    name='Send out birthday greetings', 
    trigger='cron', 
    minute=0, 
    hour=12,
)

atexit.register(lambda: scheduler.shutdown())

【讨论】:

  • 谢谢,我搜索的似乎是正确的东西
【解决方案2】:

如需 python 解决方案,请查看Celery Beat

对于更简单的事情,您可以创建一个 cron job 并附上日程表 0 0 * * *。这将导致您的脚本在每天午夜运行。

【讨论】:

    【解决方案3】:

    您可以创建一个包含 Pyramid 功能的脚本作为框架的一部分 (http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/commandline.html#writing-a-script);这将允许您拥有一个仍然能够访问您的金字塔螺母和螺栓的独立功能。但是根据您的更新,它仍然是一个独立的脚本,需要通过某种任务调度程序进行调度。

    除非我遗漏了什么,否则 Pyramid 不会“一直运行”到您可以有一个计时器或排序的地步……您有一个服务器来处理由 Pyramid 处理的请求。我想你可以做一些事情,比如有一个金字塔响应,你点击那些触发计时器或其他东西然后无限运行的东西,但这似乎是一种糟糕的处理方式。即使是上面的脚本想法 - 你可以执行一次并启动一个计时器并让它无限运行,但是你有一个不断运行的进程。

    更好的解决方案是按照建议将当前日期的生日写到表格中,然后在您的视图中查询该表格以进行显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      相关资源
      最近更新 更多