我刚开始使用django-celery,我想将celeryd作为守护进程运行。但是,instructions似乎暗示它一次只能配置一个站点/项目。芹菜可以处理多个项目,还是只能处理一个项目?而且,如果是这种情况,是否有一种简洁的方法来设置芹菜以便为每个配置自动启动,这要求我为每个配置创建一个单独的初始化脚本?使用celeryd作为一个守护进程与多个Django应用程序?
17
A
回答
8
像所有有趣的问题,答案是它取决于。 :)
这是绝对有可能提出一个场景,芹菜可以由两个独立的网站使用。如果多个站点将任务提交给同一个交易所,并且这些任务不需要访问任何特定的数据库 - 也就是说,他们使用电子邮件地址或信用卡号码或数据库记录以外的其他数据库 - 那么一个芹菜可能会就足够了。只要确保任务代码位于由所有站点和芹菜服务器加载的共享模块中。
虽然你会发现celery需要访问数据库 - 它可以根据作为任务参数传递的ID加载对象,或者必须对数据库写入一些更改,或者,最常见的是两者。多个网站/项目通常不共享数据库,即使它们共享相同的应用程序,因此您需要将任务队列分开。
在这种情况下,通常会发生的情况是您设置了一个具有多个交换机的单个消息代理(例如RabbitMQ)。每个交易所都接收来自单个站点的消息。然后你为每次交换运行一个或多个芹菜进程(在芹菜配置设置中,你必须指定交换,我不相信芹菜可以听多次交换)。每个芹菜服务器都知道它的交换,它应该加载的应用程序以及它应该连接的数据库。
为了管理这些,我建议您查看cyme - 它是通过@asksol,并在多个服务器上管理多个celeryd实例(如有必要)。我没有尝试,但它看起来应该处理不同实例的不同配置。
1
没试过,但使用3.1.X芹菜它不需要Django的芹菜,根据文档,您可以实例化一个芹菜应用程序是这样的:
app1 = Celery('app1')
app1.config_from_object('django.conf:settings')
app1.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
但是你可以使用芹菜多了几下水每个工作人员都有单一配置,您可以看到示例here。所以,你可以启动几个工人用不同--app APPX参数,所以它会使用不同的TAKS和设置:
# 3 workers: Two with 3 processes, and one with 10 processes.
$ celery multi start 3 -c 3 -c:1 10
celery worker -n [email protected] -c 10 --config celery1.py --app app1
celery worker -n [email protected] -c 3 --config celery2.py --app app2
celery worker -n [email protected] -c 3 --config celery3.py --app app3
相关问题
- 1. Celeryd运行多个守护进程
- 2. 扭曲:从另一个应用程序守护进程产生应用程序守护进程
- 3. 使用一个芹菜与多个python守护进程
- 4. 定时器()作为守护进程与非守护进程
- 5. 如何在ubuntu中将celeryd作为守护进程运行?
- 6. Monotouch守护进程应用程序
- 7. 设计一个多进程守护
- 8. init进程是一个守护进程
- 9. 使Ruby程序成为守护进程?
- 10. 使用django作为守护进程运行celerybeat的问题
- 11. 增值公地守护程序的一个应用程序
- 12. python守护进程的单个实例(使用python守护进程)
- 13. 使用python,守护进程
- 14. SimpleHTTPServer推出作为一个线程:不会守护进程
- 15. 使用listen-addr与docker守护进程
- 16. C#托盘图标应用程序与守护进程
- 17. 用nginx运行一个守护进程的瓶子应用程序
- 18. 使用JSVC守护java应用程序
- 19. 我们如何制作守护进程应用程序?
- 20. 作为守护程序服务的Spring Boot应用程序?
- 21. 守护程序线程不止一个?
- 22. Python的多线程守护进程(模块守护进程,并线程一起使用)
- 23. 用守护进程作为后台任务启动play2应用程序
- 24. 编写一个unix守护进程
- 25. cron输出到一个守护进程
- 26. heroku运行一个守护进程
- 27. 从PHP启动一个守护进程
- 28. 编写一个linux守护进程
- 29. 如何使用Jsvc作为守护程序启动Java程序
- 30. 使用多个-Xmx选项(hadoop)启动的Java守护进程