芹菜多里面码头工人容器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了芹菜多里面码头工人容器相关的知识,希望对你有一定的参考价值。
我在码头工人容器中有芹菜的python应用程序。我想要几个工人队列不同。例如:
celery worker -c 3 -Q queue1
celery worker -c 7 -Q queue2,queue3
但我不会在docker compose中这样做。我发现芹菜多了。我试过用它。
version: '3.2'
services:
app:
image: "app"
build:
context: .
networks:
- net
ports:
- 5004:5000
stdin_open: true
tty: true
environment:
FLASK_APP: app/app.py
FLASK_DEBUG: 1
volumes:
- .:/home/app
app__celery:
image: "app"
build:
context: .
command: sh -c 'celery multi start 2 -l INFO -c:1 3 -c:2 7 -Q:1 queue1 -Q:2 queue2,queue3'
但我明白了......
app__celery_1 | > celery1@1ab37081acb9: OK
app__celery_1 | > celery2@1ab37081acb9: OK
app__celery_1 exited with code 0
我的芹菜容器关闭了。怎么不让他靠近他的原木?
UPD:Celery多创建了后台进程。如何在前景中启动芹菜多?
答案
我这样做了。我用supervisord代替芹菜多。 Supervisord从前景开始,我的容器没有关闭。
command: supervisord -c supervisord.conf
我将所有队列添加到supervisord.con
[program:celery]
command = celery worker -A app.celery.celery -l INFO -c 3 -Q q1
directory = %(here)s
startsecs = 5
autostart = true
autorestart = true
stopwaitsecs = 300
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
[program:beat]
command = celery -A app.celery.celery beat -l INFO --pidfile=/tmp/beat.pid
directory = %(here)s
startsecs = 5
autostart = true
autorestart = true
stopwaitsecs = 300
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
[supervisord]
loglevel = info
nodaemon = true
pidfile = /tmp/supervisord.pid
logfile = /dev/null
logfile_maxbytes = 0
另一答案
首先,我不明白使用multi和docker的优势。在我看来,你希望每个工人都在一个单独的容器中。这样您就拥有了灵活性和微服务环境。
如果您仍希望在同一容器中拥有多个工作线程,我可以通过在命令末尾添加while true; do sleep 2; done
来建议解决方法以保持容器打开:celery multi start 2 -l INFO -c:1 3 -c:2 7 -Q:1 queue1 -Q:2 queue2,queue3 && while true; do sleep 2; done
。
或者,将其包装在一个简短的脚本中:
#!/bin/bash
celery multi start 2 -l INFO -c:1 3 -c:2 7 -Q:1 queue1 -Q:2 queue2,queue3
while true; do sleep 2; done
以上是关于芹菜多里面码头工人容器的主要内容,如果未能解决你的问题,请参考以下文章