Python 主进程中的file.seek()/write(),线程中的file.flush()

Python 主进程中的file.seek()/write(),线程中的file.flush(),python,python-3.6,python-asyncio,Python,Python 3.6,Python Asyncio,我用open(…,'r+b')打开了一个文件,当主进程在Python 3.6+中对该文件执行.read()/.write()/.seek()操作时,在线程中调用.flush()是否安全 目标是能够使用缓冲区快速读/写,但将刷新卸载到线程中(假设这是最昂贵的操作) 这种方法还有什么其他的技巧或窍门吗?请参阅,f/e,re:fsync()在不同的线程上是无用的。诚然,这与flush()--fsync()确保内容被刷新到磁盘(并在重新启动后生存),而flush()确保内容被刷新到操作系统(并对其他进程

我用
open(…,'r+b')
打开了一个文件,当主进程在Python 3.6+中对该文件执行
.read()
/
.write()
/
.seek()
操作时,在线程中调用
.flush()
是否安全

目标是能够使用缓冲区快速读/写,但将刷新卸载到线程中(假设这是最昂贵的操作)


这种方法还有什么其他的技巧或窍门吗?

请参阅,f/e,re:
fsync()
在不同的线程上是无用的。诚然,这与
flush()
--
fsync()
确保内容被刷新到磁盘(并在重新启动后生存),而
flush()
确保内容被刷新到操作系统(并对其他进程可见)——但也可能存在类似的问题(取决于您的libc如何管理其缓冲区)..将您正在写入的内容放入队列,并从队列中读取一个单独的线程、写入接收器和刷新,这将更加简单。这样,您就不会依赖于任何未被很好地记录的语义。(明确地说,一个
.write()
到一个缓冲流,该缓冲流的长度不足以触发
刷新()
自动执行,并且不会触发写入操作(例如,如果流是行缓冲的,则通过包含换行符),实际上根本不执行任何操作系统级工作:它只是将内容附加到缓冲区,由本地libc管理,稍后将在刷新或关闭时写入)。