如何从使用 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_asyncerror_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。