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”一书中的线程和进程一章,它并没有真正给我太多关于如何实际使用这些方法的想法。

任何帮助,将不胜感激。

4

1 回答 1

7

使用日志记录模块。更一般地说,您需要使用 Lock

import threading

lock = threading.Lock()
...

with lock:
    #Open the file and write to it

基本上,这也是logging如此。更准确地说,Handler-objects(实际写入某些输出,例如文件)实现锁定。

重要的是所有进程都使用相同的 Lock 对象,而不是创建自己的。因此,您可以将其放在模块级别或类似级别。

于 2013-01-10T12:28:18.697 回答