【问题标题】:Can I tie Celery workers to a particular instance given a shared database?我可以将 Celery 工作人员绑定到给定共享数据库的特定实例吗?
【发布时间】:2013-01-15 12:03:48
【问题描述】:

我有许多机器,每台机器都有一个 Django 实例,共享一个 Postgres 数据库。

我想运行 Celery,为了简单起见,最好使用 Django 代理和 Postgres 数据库。我没有大量任务要运行,因此没有必要使用不同的代理。

我想运行在本地文件存储上运行的 celery 任务。这意味着我希望 celery worker 只运行在触发事件的同一台机器上的任务。

目前的设置是否可行?如果没有,怎么办?每台机器都有一个本地 Redis 实例?

【问题讨论】:

    标签: celery


    【解决方案1】:

    我想出了如何使这项工作。不需要花哨的路由或经纪人。

    我使用以主机命名的特殊队列运行每个 celeryd 实例。这可以自动完成,例如:

    ./manage.py celeryd -Q celery,`hostname`
    

    然后我在settings.py 中设置一个主机名来存储主机名:

    import socket
    CELERY_HOSTNAME = socket.gethostname()
    

    在每个 Django 实例中,这将具有不同的值。

    然后我可以在异步调用我的任务时指定这个队列:

    my_task.apply_async(args=[one, two], queue=settings.CELERY_HOSTNAME)
    

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 2012-08-05
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多