重明鸟软件知识平台
@Python多进程下文件读写
下面的例子是Python3在多进程环境下对文件进行共享写入。这里用到了互斥锁。
import fcntl
import os
import time
import multiprocessing

def tofile(id):
	file = open('tmp.txt','a')
	fcntl.flock(file.fileno(),fcntl.LOCK_EX)
	file.write(str(id))
	time.sleep(1)
	file.write(",")
	time.sleep(1)
	file.write("\n")
	file.close()
	
for i in range(0,4):
	p = multiprocessing.Process(target=tofile,argw=(i,))
	p.start()	

程序执行后,我们打开tmp.txt文件可以看到:
1,1
3,3
0,0
2,2
这说明互斥锁起作用了。

fcntl.flock其实就是Linux下的互斥锁。他的参数是这样的
linux的flock() 的函数原型如下所示:

int flock(int fd, int operation);
其中,参数 fd 表示文件描述符;参数 operation 指定要进行的锁操作,该参数的取值有如下几种:

LOCK_SH:表示要创建一个共享锁,在任意时间内,一个文件的共享锁可以被多个进程拥有;
LOCK_EX:表示创建一个排他锁,在任意时间内,一个文件的排他锁只能被一个进程拥有;
LOCK_UN:表示删除该进程创建的锁;
LOCK_MAND:它主要是用于共享模式强制锁,它可以与 LOCK_READ 或者 LOCK_WRITE联合起来使用,从而表示是否允许并发的读操作或者并发的写操作;

Copyright @ 2011-2018 by szc  桂ICP备11003301号-1  桂公网安备45040302000027号  Email:szcsoft@qq.com