5

リクエストの一部をログ ファイルに書き込むメソッドを Flask サーバーに記述する必要があります。ただし、正しく理解していれば、Flask はマルチスレッドであり、ファイルへの書き込みが安全ではない可能性が高いです。

確かに、私は多かれ少なかれPythonとマルチスレッドプログラミング全般に慣れていないので、誰かがこれを少しだけ握ってくれる必要があります:)

これまでの私のコード(わずかに変更されています。その部分がないと、オンラインで投稿するのに苦労します)

@app.route('/store_test')
def store_test():
    now = str(time.time())
    ip_address = request.remote_addr
    agent = request.user_agent.string

    log_data = [now,ip_address,agent]
    log_data_string = "\t".join(log_data)

    filename = "log.dat"

    f = open(filename,'a')
    f.write(log_data_string + "\n")
    f.close()

    return 'OK'

open ステートメントと close ステートメントの周りに何らかのコードをラップする必要があると思いますが、何が何なのかよくわかりません。「Python in a Nutshell」の本の Threads and Processes の章を読んでいますが、実際にはあまり役に立ちません。これらのメソッドを実際にどのように使用するかについてのアイデアの。

任意の助けをいただければ幸いです。

4

1 に答える 1

7

ロギング モジュールを使用します。より一般的には、ロックを使用する必要があります

import threading

lock = threading.Lock()
...

with lock:
    #Open the file and write to it

基本的に、これloggingも同様です。より正確には、Handlerオブジェクト (ファイルなどの出力に実際に書き込むオブジェクト) はロックを実装します。

独自の Lock オブジェクトを作成するのではなく、すべてのプロセスが同じ Lock オブジェクトを使用することが重要です。したがって、モジュールレベルなどに配置できます。

于 2013-01-10T12:28:18.697 に答える