Python多线程访问同一个文件

标签 python file multithreading

我有两个线程,一个写入文件,另一个定期写入 将文件移动到不同的位置。写入总是在写入消息前调用open,写入消息后调用close。移动器使用 shutil.move 进行移动。

我看到在第一步完成后,编写器无法再写入文件,即在第一步之后文件的大小始终为 0。我做错了什么吗?

最佳答案

锁定是一种可能的解决方案,但我更喜欢让每个外部资源(包括文件)由一个单独的线程处理的通用架构。其他线程将工作请求发送到 Queue.Queue 上的专用线程实例(如果他们需要返回结果,则提供自己的单独队列作为工作请求参数的一部分),专用线程大部分时间都在等待该队列上的 .get ,无论何时获取一个请求并执行它(如果需要,在传入队列中返回结果)。

我已经提供了这种方法的详细示例,例如在“Python 简而言之”中。 Python 的队列本质上是线程安全的,可以极大地简化您的生活。

此架构的优点之一是它可以顺利转换为 multiprocessing。如果您决定将某些工作切换到单独的进程而不是单独的线程(例如,利用多核)——multiprocessing 提供了自己的工作方式类似的 Queue 类型使这种过渡如丝绸般顺畅;-)。

关于Python多线程访问同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301458/

相关文章:

linux - 您可以将 Amazon EBS 附加到多个实例吗?

PHP:从php文件中获取PHP的变量、函数、常量

java - 如何在 Java 中等待线程完成,其中使用 run() 启动线程

python - 如何在 Python 中使用 for 循环从 0 迭代到 sys.maxint

python - 如何在seaborn中填充线图下的区域

linux - 使用 Bash 或 Perl 将一行文本替换为目录中的多个文件

java - 使用java从套接字流读取多个流?

android - 如何暂停和恢复 surfaceView 线程

python - Pandas/Numpy 根据存在将行移入列

python - 如何序列化request.POST数据?