安排常规活动:Cron/Cron 替代品(包括 Celery)
Posted
技术标签:
【中文标题】安排常规活动:Cron/Cron 替代品(包括 Celery)【英文标题】:Scheduling a regular event: Cron/Cron alternatives (including 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 苦苦挣扎了大约两个星期,不幸的是,我认为是时候认输并放弃它了,至少现在是这样。)
【问题讨论】:
为什么要在 Windows 上开发而在 Linux 上部署?看起来你正在为这些头疼的事情做好准备。 不完全是我的选择。我考虑过更换我的一台计算机或对其进行分区,但最终这有其自身的同等问题。只是想充分利用现在的情况。 Wubi 安装程序让你现在可以轻松双启动到 ubuntu。 对于仍在尝试原始初始方式的人,即设置 celery,请检查此 (aameer.github.io/celery-an-asynchronous-task-queue-job-queue) 和在 webfaction 上设置 rabbitmq,请检查此 (aameer.github.io/installing-rabbitmq-on-webfaction)。此外,如果您想对它们进行守护,请检查此 (aameer.github.io/circus-as-an-alternative-to-supervisor) 希望它对某人有所帮助。 【参考方案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 管理中安排任务/命令。
【讨论】:
以上是关于安排常规活动:Cron/Cron 替代品(包括 Celery)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node-Cron 每 10 秒执行一次 Cron 作业