读书人

文件锁跟Python多进程的使用

发布时间: 2012-09-15 19:09:29 作者: rapoo

文件锁和Python多进程的使用

1.文件锁

问题:进程P1中有一个线程T1,T1执行的函数为f1;进程P2中有一个线程T2,T2执行的函数为f2。

当f1和f2都需要对同一个资源进行操作时,比如同时对文件file1进行操作。为了线程安全,则当f1在操作(读或写文件file1)时,不允许f2操作(读或写文件file1)。反之,当f2在操作file1时,不允许f1操作file1。即f1和f2不能同时操作file1。

解决方法

可以采用文件锁的方式,对文件file1轮流交替的操作:即f1操作完file1之后,f2开始操作file1;当f2操作完file1之后,f1开始操作file1,这样交替下去。

可以设置4种状态:00、11、22、33。将这4种状态保存在文件‘fs.txt’里,因为这样进程P1和P2都可以操作文件fs.txt(解决了进程间相互通信的问题)。4种状态分别表示如下:

00:表示f1可以操作资源file1了,同时也表示f2操作完毕file1;

11:表示f1正在操作资源file1;

22:表示f1操作完毕file1,同时也表示f2可以操作file1了;

33:表示f2正在操作file1。

访问流程图如下所示:

文件锁跟Python多进程的使用

我们可以看到,函数f1的状态顺序为'00' ->'11' -> '22';函数f2的状态顺序为'22' -> '33' -> '00'。

形成了如下的环形交替访问:

文件锁跟Python多进程的使用

2.Python中多进程的使用

下面将python中多进程的使用和文件锁进行结合,给出一个简单的demo。

公共函数(读文件、写文件)定义在文件GlobalFunc.py中:

读书人网 >perl python

热点推荐