在python 环境的Lib
文件夹下新建fcntl.py文件,在其中写入下面的内容:
fcntl.py是linux平台上python自带的包,windows平台下没有,所以需要自己设计一份,让windows下引用fcntl功能的程序可以跑通。
参考资料:https://blog.youkuaiyun.com/jacke121/article/details/82218151
LOCK_UN=8
LOCK_EX=2
F_GETFD=1
FD_CLOEXEC=1
F_SETFD=2
def fcntl(fd, op, arg=0):
return 0
def ioctl(fd, op, arg=0, mutable_flag=True):
if mutable_flag:
return 0
else:
return ""
def flock(fd, op):
return
def lockf(fd, operation, length=0, start=0, whence=0):
return
注意:这些*
号的地方,点击后可以跳转到fcntl.pyi文件,里面写有函数类型、参数类型的注解。
什么是.pyi文件 https://blog.youkuaiyun.com/weixin_40908748/article/details/106252884
注意:运行中缺什么参数定义可以去linux中的python里面导入fcntl包去查,然后再copy回来就行。
https://blog.youkuaiyun.com/dandanforgetlove/article/details/108337188
一个不太想关的博客,感觉以后有可能会用到,先留个连接
import mlogging,No module named ffi,import fcntl 报错
https://blog.youkuaiyun.com/AlanGuoo/article/details/84309886
测试代码:
import threading
import time
import datetime
import fcntl
def run(n):
print(f"task {n}:{datetime.datetime.now()}")
with open('./threading.txt','a',encoding='utf-8') as fj:
fcntl.flock(fj,fcntl.LOCK_EX)
fj.write(f"task {n}:{datetime.datetime.now()}")
fcntl.flock(fj,fcntl.LOCK_UN)
if __name__ == '__main__':
t1=threading.Thread(target=run,args=(1,))
t2=threading.Thread(target=run,args=(2,))
t3=threading.Thread(target=run,args=(3,))
t4=threading.Thread(target=run,args=(4,))
t1.start()
t2.start()
t3.start()
t4.start()
pass