- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 current_app.logger
,当我尝试登录线程内部时,它显示“在应用程序上下文之外工作”。如何记录来自线程中运行的方法的消息?
def background():
current_app.logger.debug('logged from thread')
@app.route('/')
def index():
Thread(target=background).start()
return 'Hello, World!'
Exception in thread Thread-16:
Traceback (most recent call last):
File "/usr/lib64/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/home/sapam/demo.py", line 57, in background
current_app.logger.critical('test')
File "/home/sapam/.virtualenvs/demo/lib/python3.5/site-packages/werkzeug/local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "/home/sapam/.virtualenvs/demo/lib/python3.5/site-packages/werkzeug/local.py", line 302, in _get_current_object
return self.__local()
File "/home/sapam/.virtualenvs/demo/lib/python3.5/site-packages/flask/globals.py", line 51, in _find_app
raise RuntimeError(_app_ctx_err_msg)
RuntimeError: Working outside of application context.
This typically means that you attempted to use functionality that needed
to interface with the current application object in a way. To solve
this set up an application context with app.app_context(). See the
documentation for more information.
127.0.0.1 - - [13/Sep/2016 12:28:24] "GET / HTTP/1.1" 200 -
最佳答案
您以标准方式使用标准logging
模块:获取当前模块的记录器并使用它记录一条消息。
def background():
logging.getLogger(__name__).debug('logged from thread')
app.logger
主要用于内部 Flask 日志记录,或者至少在应用上下文中进行日志记录。如果您在一个线程中,您将不再处于相同的应用程序上下文中。
您可以将 current_app._get_current_object()
传递给线程并使用它代替 current_app
。或者您可以子类化 Thread
来做类似的事情。
def background(app):
app.logger.debug('logged from thread')
@app.route('/')
def index():
Thread(target=background, kwargs={'app': current_app._get_current_object()}).start()
return 'Hello, World!'
class FlaskThread(Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.app = current_app._get_current_object()
def run(self):
with self.app.app_context():
super().run()
def background():
current_app.logger.debug('logged from thread')
@app.route('/')
def index():
FlaskThread(target=background).start()
return 'Hello, World!'
同样适用于多处理。
关于python - 在线程中使用 Flask current_app.logger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476889/
我正在尝试从蓝图(我将在模板中使用的函数)在 Jinja 环境中添加一个函数。 主.py app = Flask(__name__) app.register_blueprint(heysyni) M
最近,我开始使用 Flask 构建应用程序。它非常易于使用,但功能强大且使用起来很有趣。不幸的是,我在理解应用程序上下文的工作方式时遇到了问题。我知道 current_app、app_context
current_app 和 g 都是应用程序上下文变量,因此它们会随着每个请求加载和卸载,因此存储在它们上的任何数据都只能在同一个请求中使用. 我能看到的唯一区别是 g 在每个请求的开头都是空的,而
我正在使用 current_app.logger,当我尝试登录线程内部时,它显示“在应用程序上下文之外工作”。如何记录来自线程中运行的方法的消息? def background(): curr
这个问题在这里已经有了答案: Are global variables thread-safe in Flask? How do I share data between requests? (4 个
我尝试为 Flask 创建两个装饰器来装饰一个简单的函数。两个装饰器都需要访问 current_app 上的相同字段/属性。装饰函数也需要访问相同的属性。但我想测试这个字段是否已经存在并在任一装饰器中
我在我的 Flask 应用程序上看到了一个相当奇怪的行为:嵌套的 app_contexts 没有在我的测试套件上正常工作,因此 current_app localproxy 没有指向正确的应用程序。它
我正在编写可重复使用的应用程序。我想多次部署它。 这是 urls.py: urlpatterns = patterns('', (r'^carphotos/', include('webui.phot
我已经设置了 Sphinx 来记录我的 Flask 项目,但是,我遇到了这个错误: [$]>>> make html sphinx-build -b html -d build/doctrees -
我在使用 current_app.send_task 时遇到 Celery 队列路由问题 我有两个 worker (每个队列一个) python manage.py celery worker -E
我不敢相信这会这么难。我在网上评分试图找到解决方案,但仍然无法访问我的 Flask 应用程序的 root_path。更糟糕的是,它在一个文件中有效,而在另一个文件中却无效。这是我尝试过的: from
我想对以下功能进行单元测试: from flask import current_app def fuu(): current_app.logger.info('hello world')
我在运行 CentOS 7 的服务器上使用 Django 1.11 (Python/2.7.5) + Apache/2.4.6 + mod_wsgi/3.4 部署了一个应用程序。 页面工作正常,但登录
我并没有尝试在 View 函数中使用 celery.current_app,但是我有一个挂接到 after_task_publish 信号的函数,该信号使用它来更新状态发布任务后,它在 Flask V
好的,我已经尝试了我和谷歌所能想到的一切。我正在尝试在我的 Macbook Pro OSX 10.8.4 上的 virtualenv 下运行 django-celery。我在激活 virtualenv
我刚刚通过 Gitlab 将我的应用程序上传到生产服务器 (Centos7) 并进行了迁移,一切正常,这里的问题是,一旦我想通过浏览器访问,我就会在日志中收到此错误: File "/usr/lib/p
我刚刚将 Django 从 1.9 升级到 1.10。我在测试环境中运行 1.10 并解决了所有升级问题以确保一切正常。 但是,当我在我的实时网站上执行此操作并加载主页时,我收到以下错误 环境: Re
我的应用程序中有一些已弃用的自定义端点,以支持从旧 API 迁移到 Eve。我的自定义端点之一实现了一个端点,用于更新 MongoDB 数据库中的文档。与这些文档关联的集合具有在 settings.p
是的,我知道有很多关于与这个值错误相关的堆栈溢出的类似问题,我尝试了他们的所有解决方案,但由于我是 Django 和 python 的新手,我无法解决这个问题。 我有一个名为 my_backend 的
我是一名优秀的程序员,十分优秀!