Python stdout не перенаправляет в файл в потоках - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть веб-сервер, который запускает потоки при запуске на:

@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')
    ...

Но это было бы слишком просто, я думаю.Могу ли я добиться этого с помощью многопроцессорной обработки вместо этого?

...