我试图分发Django和Celery。
我用Django和Celery创建了一个小项目。 Django将要求Celery Worker处理数据库中的一些数据。然后将数据传递回Django。
我的想法是:
因此共有3台服务器
然而,问题是芹菜必须使用Django的一些代码,例如模型,因为它访问模型。因此,它还需要settings.py文件才能知道服务器是什么。
这是否意味着对于#3,我需要在服务器上安装Django和Celery,但是禁用Django并且只运行芹菜?例如celery -A PROJECT_NAME worker -l INFO,但没有用于Django的Apache服务器?
答案 0 :(得分:5)
如果您希望芹菜工作者在不同的服务器上运行,您需要确保可以从该服务器访问该工作人员所需的所有资源。
例如,如果您有一个简单的任务,则只能将该任务所需的代码复制到服务器。如果您的工作人员需要任何其他资源,例如其他一些代码,文件,数据库,则需要确保它具有访问权限。
实际上,如果您希望有两台服务器处理相同的任务,则必须使用简单的Web界面(例如Flask)在服务器之间进行通信(并扩展队列的功能)。然后,您必须确保它们都使用相同的数据源。
考虑远程托管数据库,或让远程服务器远程访问数据库。无论哪种方式,在服务器上运行的任何工作人员都需要访问数据库以及完成任务所需的所有源代码。然后,您必须让两台服务器共享一个消息队列。