2017-09-23 66 views
0

在Python2,是安全的有多个线程使用的代码,如从单一不变的磁盘文件阅读:Python中的文件输入是线程安全的吗?

with open(pathname, 'rb') as f: 
    f.seek(file_position) 
    data = f.read(number_of_bytes) 

的进程没有,或将有该文件写入权限。

显然,以这种方式读取文件不是原子的。 Python2文档没有提到(我能找到)关于文件对象和线程的内容。下面是seek方法的文档:

https://docs.python.org/2/library/stdtypes.html?highlight=seek#file-objects

这是我的系统的一个关键问题,所以如果能够提供指针到文档,这将是令人欣慰的。

谢谢。

回答

2

如果每个线程都执行您提供的代码,它们将单独打开文件,这是安全的。我不确定要提交什么文件。这只是允许进程多次打开相同文件的结果。您可能不在POSIX系统上,但仅供参考,它将open file description描述为由open()(以C语言包装,但由Python包装)创建的事物,其中包含文件偏移量以及与访问文件相关的其他信息。

+0

谢谢。你的最后一句话很关键,因为它说Python文件对象相互独立,即使它们与磁盘上的文件存在多对一的关系。 –