我需要在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”一书中的Threads and Processes章节,而且它并不是真的给了我很多关于如何实际使用这些方法的想法。
任何帮助将不胜感激。
答案 0 :(得分:8)
使用logging module。更一般地说,您需要使用锁
import threading
lock = threading.Lock()
...
with lock:
#Open the file and write to it
基本上,这也是logging
的作用。更确切地说,Handler
- 对象(实际写入某些输出,例如文件)实现锁定。
重要的是所有进程都使用相同的Lock对象,而不是创建自己的对象。因此,您可以将其置于模块级或类似级别。