如何从使用 uWSGI 异步执行的任务中记录 stderr
How to log stderr from task executed asynchronously using uWSGI
在我的 Flask 应用程序中,我在第一个请求之前分配了一个线程池,并使用此处分配的线程异步执行任务
from app import app
from multiprocessing.pool import ThreadPool
@app.before_first_request
def initialize():
app.pool = ThreadPool(10)
稍后...
app.pool.apply_async(exporter, args=(domains))
我正在为我的网络服务器使用 uWSGI 后端,这工作正常,除了我的 uwsgi
登录 /var/log/uwsgi/%n.log
仅记录从该池执行的线程的 stdout
。我看不到 stderr
。我想知道这是否可以使用 uwsgi
日志记录功能,或者我是否必须使用可插入的记录器。谢谢!
我通过使用 apply_async
的 error_callback
参数找到了解决方案。
我创建了一个函数:
def error_handler(e):
traceback.print_exception(type(e), e, e.__traceback__)
然后执行异步任务如下:
app.pool.apply_async(exporter, args=(domains), error_callback=error_hander)
这个returns主线程执行完成后的stderr。
在我的 Flask 应用程序中,我在第一个请求之前分配了一个线程池,并使用此处分配的线程异步执行任务
from app import app
from multiprocessing.pool import ThreadPool
@app.before_first_request
def initialize():
app.pool = ThreadPool(10)
稍后...
app.pool.apply_async(exporter, args=(domains))
我正在为我的网络服务器使用 uWSGI 后端,这工作正常,除了我的 uwsgi
登录 /var/log/uwsgi/%n.log
仅记录从该池执行的线程的 stdout
。我看不到 stderr
。我想知道这是否可以使用 uwsgi
日志记录功能,或者我是否必须使用可插入的记录器。谢谢!
我通过使用 apply_async
的 error_callback
参数找到了解决方案。
我创建了一个函数:
def error_handler(e):
traceback.print_exception(type(e), e, e.__traceback__)
然后执行异步任务如下:
app.pool.apply_async(exporter, args=(domains), error_callback=error_hander)
这个returns主线程执行完成后的stderr。