【问题标题】:Scheduling a regular event: Cron/Cron alternatives (including Celery)安排常规活动:Cron/Cron 替代品(包括 Celery)
【发布时间】:2011-09-10 20:36:42
【问题描述】:

我感兴趣的事情是定期以固定的时间间隔运行一组特定的操作。显然这是cron的任务吧?

不幸的是,互联网似乎存在一些分歧。

让我详细说明一下我的设置。首先,我的开发环境在 Windows 中,而我的生产环境托管在 Webfaction (Linux) 上。 Windows 上没有真正的 cron,对吧?另外,我使用Django!对 Django 有什么建议?

Celery 当然!不幸的是,设置 Celery 对我来说或多或少是一场噩梦 - 请参阅 Error message 'No handlers could be found for logger “multiprocessing”' using Celery。这只是我在 Celery 上遇到的问题之一。其他包括一个套接字错误,我是唯一一个遇到这个问题的人。

别误会,Celery 看起来真的很酷。不幸的是,似乎缺乏支持,并且其首选后端 RabbitMQ 中内置了一些奇怪的限制。不幸的是,无论程序多么酷,如果它不起作用,那么它就不起作用!

这就是我希望你们所有人都能进来的地方。我想了解 cron 或 cron 等效项,它们可以在 Windows 和 Linux 环境中类似地(最好是相同地)设置。

(我已经与 Celery 苦苦挣扎了大约两个星期,不幸的是,我认为是时候认输并放弃它了,至少现在是这样。)

【问题讨论】:

标签: python windows django linux cron


【解决方案1】:

一种简单的、非 Celery 的处理方法是创建 custom django-admin commands 来执行您的异步或计划任务。

然后,在 Windows 上,您可以使用at 命令来安排这些任务。在 Linux 上,您使用 cron

如果可以的话,我也强烈建议放弃 Windows 以用于开发环境。在 Linux 甚至 Mac OSX 上,你的生活会好很多。例如,使用 Ubuntu 重新利用备用或旧机器,或在 Windows 机器上的 VM 中运行 Ubuntu。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并没有尝试使用 celery(太复杂)或 cron(应用程序外部)来解决它,最终找到了 Advanced Python Scheduler。刚刚开始使用它,但它似乎相当成熟和稳定,有不错的文档,并且会采用多种调度格式(例如 cron 样式)。

    documentation,以特定间隔运行函数。

    from apscheduler.scheduler import Scheduler
    sched = Scheduler()
    sched.start()
    def hello_world():
        print "hello world"
    sched.add_interval_job(hello_world,seconds=10)
    

    这是非阻塞的,我只需从我的urls.py 导入模块即可运行完全相同的东西。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      https://github.com/andybak/django-cron

      由单个 cron 任务触发,但所有调度和配置均在 Python 中完成。

      【讨论】:

        【解决方案4】:

        Django Chronograph 是一个不错的选择。您只需要设置一个 cron,然后在 django admin 中执行所有操作。您可以从 django 管理中安排任务/命令。

        【讨论】:

          猜你喜欢
          • 2020-12-18
          • 2016-02-16
          • 2017-03-23
          • 1970-01-01
          • 1970-01-01
          • 2010-09-22
          • 1970-01-01
          • 1970-01-01
          • 2015-01-17
          相关资源
          最近更新 更多