Python 芹菜、烧瓶和Docker-日志和运行任务的问题
我正在用烧瓶、芹菜和Docker做一个项目。 其思想是使用芹菜从rest调用运行耗时的进程,其中大多数涉及到对外部API的调用 首先,我遇到的问题是,当我启动容器时,任务根本不运行,在日志中除了以下内容外,我看不到任何内容:Python 芹菜、烧瓶和Docker-日志和运行任务的问题,python,docker,flask,celery,Python,Docker,Flask,Celery,我正在用烧瓶、芹菜和Docker做一个项目。 其思想是使用芹菜从rest调用运行耗时的进程,其中大多数涉及到对外部API的调用 首先,我遇到的问题是,当我启动容器时,任务根本不运行,在日志中除了以下内容外,我看不到任何内容: INFO/MainProcess] Connected to redis://redis:6379/0 INFO/MainProcess] mingle: searching for neighbors INFO/MainProcess] mingle: all alone
INFO/MainProcess] Connected to redis://redis:6379/0
INFO/MainProcess] mingle: searching for neighbors
INFO/MainProcess] mingle: all alone
INFO/MainProcess] celery@34569b50965e ready.
我将docker容器用于flask应用程序,另一个用于芹菜工人,另一个用于redis作为代理(芹菜和flask socketio使用)
- flask应用程序容器上有芹菜定义和实例
- 芹菜容器使用flaskapp映像,但在激活virtualenv后运行此命令:
celery worker-A app.controller.celery-l info
docker logs server\u Cellery\u 1-f
,以监视任务是否正在运行
然后我打开postman,向flask应用程序中的rest服务发出请求,该应用程序将任务委托给芹菜,……但什么也没发生
以下是涉及的代码:
def make_celery(_app):
celery = Celery(
_app.import_name,
backend=_app.config['redis://redis:6379/1'],
broker=_app.config['redis://redis:6379/0']
)
celery.conf.update(_app.config)
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with _app.app_context():
return self.run(*args, **kwargs)
celery.Task = ContextTask
return celery
celery = make_celery(app)
@app.route('/module/run', methods=['POST'])
@jwt_required
def run_module():
req = request.get_json()
module = req.get('module')
json_input = req.get('input')
logger.info('Running module: ' + req.get('module'))
res = do.delay(module, json_input)
return JSONEncoder().encode({'status': 'Task: ' + str(res) + ' submitted.'})
@celery.task()
def do(module_name, json_input):
logger.info('____ Running ____')
modules.run(module_name, json_input)
**但是**如果我打开芹菜事件命令行应用程序来监视任务(这在使用redis时似乎不相关……或者是吗?)
然后运行一些任务…(什么也没有发生)…当我按CTRL+CA两次退出芹菜事件窗口时,突然在芹菜容器的日志提要中看到日志,日志开始出现,任务开始运行
我错过了什么
非常感谢!我通过使用eventlet启动芹菜工人解决了这个罕见的问题:
芹菜工作者-A app.controller.engine.芹菜-l info--concurrency=2--pool eventlet
我不完全理解为什么它不能与默认的一个虽然
如果有人能告诉我这件事,我将不胜感激
无论如何谢谢你确定经纪人的url是正确的吗?我希望是这样的redis://redis:6379/0It 如果据我所知未指定,则默认使用0。但我现在添加了它,我将0设置为代理,1设置为后端,2设置为套接字io。总之,相同的事情是,所有任务都处于挂起状态,除非发生什么情况,否则不会运行(如运行和退出事件gui)…仍然无法理解为什么。我意识到,有时它在我启动容器后立即工作,有时不工作。没有记录错误。非常奇怪。我还看到,在启动容器后,提交的任务不会启动,直到我进入芹菜容器并运行芹菜命令,即
芹菜-A app.controller.engine、 芹菜检查统计数据
,然后东西“解锁”并开始工作……有什么想法吗?
celery -A app.controller.engine.celery events