【问题标题】:Using Single Celery Server For Multi Django Projects为多个 Django 项目使用单个 Celery 服务器
【发布时间】:2017-05-21 01:16:42
【问题描述】:

我有 3 个独立的 Django 项目共享在同一台机器上运行的相同数据库。 我需要的是为他们配置 Celery。 现在我的问题是:

1.) 我是否应该为单独的项目运行单独的 celery 守护程序,并在 rabbitmq 中设置不同的虚拟主机和用户,我不想选择,因为这会浪费资源或

2.) 有没有一种方法可以将来自不同项目的所有任务定位到单个 celery 服务器。

另外,supervisord 在解决方案中会有多方便?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    是的,您可以使用同一个 celery 服务器来接收来自不同项目的任务。

    有一个单独的 celery 应用程序(或只有一个文件),比如 foo,其中包含用于不同项目的所有任务。

    # foo.py    
    from celery import Celery
    
    app = Celery(broker='amqp://guest@localhost//')
    
    @app.task
    def add(x, y):
        return x + y
    
    @app.task
    def sub(x, y):
        return x - y
    

    启动一个worker来运行任务

    celery worker -l info -A foo
    

    现在从Project A,你可以拨打add

    import celery
    
    celery.current_app.send_task('foo.add', args=(1, 2))
    

    在项目 B 中,您可以致电 sub

    import celery
    
    celery.current_app.send_task('foo.sub', args=(1, 2))
    

    你可以使用 supervisord,来管理 celery worker。

    由于send_task 不会尊重CELERY_ALWAYS_EAGER,这种方法可能会稍微难以测试。但是,您可以使用this snippet,这样CELERY_ALWAYS_EAGER 将被send_task 认可。

    【讨论】:

    • Project A 和 Project B 怎么知道如何连接broker?有没有遗漏,还是我遗漏了什么?
    • 也许这是我的missing piece
    猜你喜欢
    • 2012-09-02
    • 2012-05-10
    • 2015-01-31
    • 2017-10-22
    • 2014-10-13
    • 2016-08-26
    • 2020-09-02
    • 2017-12-23
    • 2012-12-05
    相关资源
    最近更新 更多