如何使用 celery 守护进程调用 celery 任务
Posted
技术标签:
【中文标题】如何使用 celery 守护进程调用 celery 任务【英文标题】:How to invoke celery task using celery daemon 【发布时间】:2016-03-31 08:09:35 【问题描述】:我已经在我的 django 应用程序目录 myapp 下的 tasks.py 文件中编写了这个任务。
#periodic task that run every minute
@periodic_task(run_every=(crontab(hour="*", minute="*", day_of_week="*")))
def news():
'''
Grab url
'''
logger.info("Start task")
now = datetime.now()
urls = []
urls.append(crawler()) #crawler return dic obj
for url_dic in list(reversed(urls)):
for title, url in url_dict.items():
#Save all the scrape url in database
Url.objects.create(title=headline, url=url)
logger.info("Task finished: result = %s" %url)
此任务的主要目标是每分钟将 url 和标题推送到 django 数据库
要运行这个 celery 任务,我们需要使用 django ./manage
实用程序调用这些命令,如何将这些命令作为守护进程运行,我计划在 heroku 中托管这个应用程序
python manage.py celeryd --verbosity=2 --loglevel=DEBUG
python manage.py celerybeat --verbosity=2 --loglevel=DEBUG
但是我需要在后台将这两个命令命令作为守护进程运行,我们如何将这些命令作为守护进程运行,以便我的 celery 任务可以运行。
【问题讨论】:
【参考方案1】:一个快速的解决方法是在你的命令之后加上“&”,即
python manage.py celeryd --verbosity=2 --loglevel=DEBUG &
python manage.py celerybeat --verbosity=2 --loglevel=DEBUG &
点击回车后,此任务将充当守护进程,仍会打印出有用的调试信息。因此,这对于初始阶段以及有时不严重依赖 celery 的小型应用程序来说非常有用。
出于开发目的,我建议使用supervisor。参见THIS POST,它为 celery、django 和主管集成提供了非常好的信息。阅读文章的“将 Celery 工作者作为守护进程运行”部分。
【讨论】:
以上是关于如何使用 celery 守护进程调用 celery 任务的主要内容,如果未能解决你的问题,请参考以下文章
Django celery 和 celery-beat 守护进程脚本错误
Centos7 使用 Supervisor 守护进程 Celery
在 Elastic Beanstalk 上使用 Supervisor 和 Django 将 Celery 作为守护进程运行
使用 AWS Elastic Beanstalk for python 3.6 在后台运行 celery worker 作为守护进程?