У меня есть веб-сервер, который запускает потоки при запуске на:
@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
в файл в веб-API, который вызывает рабочий процесс (как этот ответпредлагает: Журнал вывода многопроцессорной обработки. Процесс ), но тогда он перенаправит все, что делает колба, в файл.Я не хочу этогоЯ просто хочу перенаправить материал из дополнительного потока в файл журнала.
Возможно, есть лучший способ сделать это?В идеале вы могли бы сделать это так:
def run_workflow():
thread = threading.Thread(target=workflow.run, logfile='workflow.log')
...
Но это было бы слишком просто, я думаю.Могу ли я добиться этого с помощью многопроцессорной обработки вместо этого?