- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有 MVC 结构的 Flask 应用程序:
my_app
├── server.py
├── requirements.txt
├── models
│ ├── __init__.py
└── model.py
├── controllers
├── __init__.py
├── client_controllers
└──controller.py
└── another_controller.py
└── templates
from flask import Flask
from celery import Celery
from controllers.client_controllers.controller import controller
app = Flask(__name__)
app.secret_key = 'SECRET'
app.register_blueprint(controller)
# Celery Configuration
def make_celery(app):
celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
app.config.update(
CELERY_BROKER_URL='redis://localhost:6379',
CELERY_RESULT_BACKEND='redis://localhost:6379'
)
celery = make_celery(app)
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True)
from flask import Blueprint, render_template, json, request, redirect, url_for, abort, session
controller = Blueprint('controller', __name__,
template_folder='templates/')
@celery.task()
def add_together(a, b):
return a + b
@controller.route('/add', methods=['GET'])
def add():
result = add_together.delay(23, 42)
result.wait()
return 'Processing'
from ...server import celery
from ..server import celery
...etc
最佳答案
flask 错误 RuntimeError: Working outside of application context.
发生是因为您不在 Flask 中 application_context() .
您应该使用 celery shared_task鉴于您的 MVC 结构,这就是您所需要的。
celery_flask/
├── celery_tasks
│ ├── app_tasks.py
│ ├── __init__.py
├── celery_worker.py
├── controllers
│ ├── __init__.py
│ ├── some_controller.py
├── __init__.py
└── server.py
#=====================
# app_tasks.py
#=====================
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task(name='celery_tasks.add_together')
def add_together(x, y):
return x + y
>>> from celery import Celery, shared_task
>>> @shared_task
... def add_together(x, y):
... return x + y
...
>>> app1 = Celery(broker='amqp://')
>>> add_together.app is app1
True
>>> app2 = Celery(broker='redis://')
>>> add_together.app is app2
True
from __future__ import absolute_import
from flask import Flask
from celery import Celery
from controllers.some_controller import controller
flask_app = Flask(__name__)
flask_app.secret_key = 'SECRET'
flask_app.register_blueprint(controller)
# Celery Configuration
def make_celery( app ):
celery = Celery('flask-celery-app', backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL'],
include=['celery_tasks.app_tasks'])
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
def list_celery_task( ):
from celery.task.control import inspect
i = inspect()
i.registered_tasks()
from itertools import chain
t = set(chain.from_iterable( i.registered_tasks().values() ))
print "registered_tasks={}".format( t )
#======================================
# MAIN
#======================================
flask_app.config.update(
CELERY_BROKER_URL='redis://localhost:6379',
CELERY_RESULT_BACKEND='redis://localhost:6379'
)
celery = make_celery(flask_app)
flask_app.celery = celery
list_celery_task( )
if __name__ == "__main__":
flask_app.run(host='0.0.0.0', debug=True)
#============================
# some_controller.py
#============================
from __future__ import absolute_import
from flask import Blueprint
from flask import current_app
controller = Blueprint('controller', __name__,
template_folder='templates/')
@controller.route('/add', methods=['GET'])
def add():
print "calling add"
result = current_app.celery.send_task('celery_tasks.add_together',args=[12,6])
r = result.get()
print 'Processing is {}'.format( r )
return 'Processing is {}'.format( r )
celery -A celery_worker worker --loglevel=DEBUG
#============================
# celery_worker.py
#============================
from __future__ import absolute_import
from celery import Celery
# Celery Configuration
def make_celery():
celery = Celery('flask-celery-app', backend='redis://localhost:6379',
broker='redis://localhost:6379',
include=['celery_tasks.app_tasks'])
return celery
celery = make_celery()
print "tasks={}".format( celery.tasks.keys() )
关于python - 在 Flask 蓝图中导入 Celery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59632556/
这个问题在这里已经有了答案: 关闭 11 年前。
我正在尝试让 Flask 蓝图在 Docker 中运行,但在正确注册蓝图时遇到问题。 我有以下结构: ├── docker-compose.yml ├── nginx │ ├── Dockerfi
目录 1、蓝图的定义 1.1使用蓝图 前言: 我们的应用经常会有很多小模块,比如用户模块、后台管理模块等,虽然这些模块都在同一个应用
我有两个问题类似于之前提出的关于使用 Blueprint CSS(交替行)的表格颜色的问题: 我能够通过将第 th、td、标题更改为与 tbody tr:nth child(even) 相同的颜色来覆
我在美国东部时间今天早上 8 点左右开始使用 Blueprint CSS,我发现自己有以下问题: 什么时候使用容器类? 我应该如何从概念上考虑容器? 容器类是否需要跨度类?为什么或为什么不? 容器类需
我不知道该怎么做。 蓝图api: # coding: utf-8 from flask import Blueprint, render_template from ..models import U
我是虚幻新手我在从 Hud_Blueprint 到 Level_Blueprint 的通信时遇到问题。 我想在 Hud 中添加一个 slider 来控制关卡中立方体的旋转。 在 Hud_Bluepri
在为 rest-service 编写 API-Deocumentation 时,我遇到了一个问题,我想列出所有可能的值,这些值可以作为响应返回。 在下面的例子中,它是“状态”字段,它可以包含枚举的任何
所以调查Blueprint ,默认宽度为 950px 并使用 24 列。我的问题是为什么将列更改为更低或更高?我们最终还是得到了 950px 的总数。 人们这样做是为了更好地控制列吗? 谢谢。 最佳答
我有以下 div。 Lorem ipsum dolor sit amet, consectetur adipiscing elit.
我正在为我的网站元素调整蓝图 CSS 框架,但我注意到蓝图没有遵循它自己的一些规则。我浏览了他们网站上的教程并尝试使用谷歌搜索解决方案,但没有任何效果。 我正在尝试设置这样的页面布局: -------
我目前正在测试 Blueprint为站点创建布局。到目前为止一切顺利,但现在我遇到了一个问题,我想知道是否有任何优雅的解决方案。 我使用的是默认的 24 列布局,在这种情况下我想做类似的事情: ..
刚开始使用 Blueprint CSS,现在开始使用网格,但有一个简单的问题。我在页面顶部创建了一个导航栏,每个链接有 2 列宽(使用 span-2)。在不破坏 css 的情况下将这些链接居中放置在网
在 Flask 网站中,我想创建一个名为 gallery 的蓝图,它是一个灯箱/艺术画廊应用程序,但有多个实例。例如, app.register_blueprint(gallery,url_prefi
我在尝试访问 Flask 蓝图中定义的路由时收到 404,但我不明白为什么。有没有人看到我做错了什么(一般来说我是 Flask 和 Python 的新手,所以它可能是一些基本的东西)? 我的蓝图(te
我正在阅读 this有人回答的问题建议使用这种方法: public static void Method(Func del) { var t = del(42); } 应该这样使用:Method(
我正在尝试将 before_first_request 功能添加到我的 Flask 应用程序的特定 Blueprint 中。您可以在下面看到我有两个蓝图:public 和 admin。 我已经尝试过,
我有一堆单元测试,用于测试蓝图中的某些路由/驼峰实现。这些测试在 95% 的时间里运行得非常好,但是每隔一段时间(大约二十分之一)我就会遇到 Camel 运行时异常: 我正在使用 Camel 2.12
我有兴趣了解 Python 3.3 中将发生哪些语言更改(无需订阅 developer mailing list 并监视消息流)。 我找到了 this page在 python.org 上,但我想知道
我正在尝试从蓝图(我将在模板中使用的函数)在 Jinja 环境中添加一个函数。 主.py app = Flask(__name__) app.register_blueprint(heysyni) M
我是一名优秀的程序员,十分优秀!