将芹菜移动到 Django 项目的远程专用机器

Moving celery to a remote, dedicated machine for a Django project

我 运行 通过 celery 为我的社交网络 Django Web 应用程序执行异步任务。在我当前的设置中,celery workers 和 celerybeat 在 Web 应用程序服务器上 运行,而 postgresql 数据库驻留在单独的服务器上。

异步任务不应该 impede/slowdown 用户体验,因此我决定将它们移到它们自己的专用机器上(它们现在变得相当庞大)。

我的问题是关于如何实现上述架构。异步工作者正在操作数据库中的表和行。

1) 我如何在远程位置调用我的异步工作者,

2) 我将如何传送他们的结果以影响数据库中所需的更改?

很想知道实现此目的的最有效方法,最好有一个说明性的例子。提前致谢。

您只需要像这样更改 BROKER_URL

BROKER_URL = 'amqp://username:password@myremotehost.com//'

因此,首先您必须决定要使用哪个经纪人,可以在此处找到更多信息 http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html

在上面BROKER_URL的例子中,我提到了使用rabbitmq-server。

在您的远程服务器上,您必须放置您的代码(可能使用 git 或 svn),然后您需要安装您决定使用的任何代理,在我的示例中,您必须安装 rabbitmq-server。在 ubuntu 你可以输入: sudo apt-get install rabbitmq-server 安装 rabbitmq-server

然后你需要像这样安装celerypip install celery

您可以进一步使用 supervisor 来管理您的 celery 启动、重启和停止。有关 supervisor 的更多信息,请参见此处:http://supervisord.org/

编辑 1:

答案1:Celery函数调用是一样的

答案 2:您必须像这样在 settings.py 文件中添加远程机器数据库主机:

我假设您使用 MySQL 作为数据库。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': your_db_name,
        'USER': your_db_user,
        'PASSWORD': your_db_password,
        'HOST': your_remote_db_host_here,
        'PORT': your_port_no_for_mysql_here,
    },
}

所以这个设置会告诉你应用程序的所有用户(像芹菜一样的用户)连接到 MySQL 数据库的远程主机。