Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜、烧瓶和Docker-日志和运行任务的问题_Python_Docker_Flask_Celery - Fatal编程技术网

Python 芹菜、烧瓶和Docker-日志和运行任务的问题

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

我正在用烧瓶、芹菜和Docker做一个项目。 其思想是使用芹菜从rest调用运行耗时的进程,其中大多数涉及到对外部API的调用

首先,我遇到的问题是,当我启动容器时,任务根本不运行,在日志中除了以下内容外,我看不到任何内容:

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