安排常规活动:Cron / Cron替代品(包括Celery)

时间:2011-06-08 12:50:01

标签: python windows django linux cron

我感兴趣的是定期按时间间隔运行某些操作。显然,这是cron的任务,对吗?

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:16)

我遇到了同样的问题,并且试图用芹菜(太复杂)或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导入模块就可以运行相同的东西。希望这会有所帮助。

答案 1 :(得分:12)

一种简单的非Celery方法可以创建 custom django-admin commands来执行异步或计划任务。

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

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

答案 2 :(得分:0)

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

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