我有一个Web服务器,当触发以下操作时,它将剥离线程:
@app.route('/run', methods=['GET'])
def run_workflow():
thread = threading.Thread(target=workflow.run)
thread.start()
return render_template('workflow.html', title='running')
在workflow.run
中,我将标准重定向到文件。如果我手动测试它,但在以其自己的线程启动时却无法测试:
def run():
logs_path = os.path.join('logs/daily.log')
sys.stdout = logs_path
# doesn't work when threaded, even if flush after, never prints to console though...
print('testing log')
现在,我知道我可以将stdout
重定向到调用工作流的Web api中的文件(例如此答案表明:Log output of multiprocessing.Process),但是随后它也会将flask所做的所有操作都重定向到文件。我不要我只想将衍生线程中的内容重定向到日志文件。
也许有更好的方法可以做到这一点?理想情况下,您可以这样做:
def run_workflow():
thread = threading.Thread(target=workflow.run, logfile='workflow.log')
...
但是我想那太容易了。我可以用多处理来实现吗?