python windows 下设置文件锁、多线程

在python 环境的Lib文件夹下新建fcntl.py文件,在其中写入下面的内容:

fcntl.py是linux平台上python自带的包,windows平台下没有,所以需要自己设计一份,让windows下引用fcntl功能的程序可以跑通。

参考资料:https://blog.csdn.net/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.csdn.net/weixin_40908748/article/details/106252884

注意:运行中缺什么参数定义可以去linux中的python里面导入fcntl包去查,然后再copy回来就行。
在这里插入图片描述

https://blog.csdn.net/dandanforgetlove/article/details/108337188

一个不太想关的博客,感觉以后有可能会用到,先留个连接

import mlogging,No module named ffi,import fcntl 报错
https://blog.csdn.net/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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值