日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python print 如何加锁_python中给程序加锁之fcntl模块的使用

發布時間:2025/3/12 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python print 如何加锁_python中给程序加锁之fcntl模块的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python 中給文件加鎖——fcntl模塊

import fcntl

打開一個文件

f = open('./test') ##當前目錄下test文件要先存在,如果不存在會報錯。

對該文件加密:

fcntl.flock(f,fcntl.LOCK_EX)

這樣就對文件test加鎖了,如果有其他進程對test文件加鎖,則不能成功,會被阻塞,但不會退出程序。

解鎖:fcntl.flock(f,fcntl.LOCK_UN)

fcntl模塊:

flock() : flock(f, operation)

operation : 包括:

fcntl.LOCK_UN 解鎖

fcntl.LOCK_EX ?排他鎖

fcntl.LOCK_SH ?共享鎖

fcntl.LOCK_NB ?非阻塞鎖

LOCK_SH 共享鎖:所有進程沒有寫訪問權限,即使是加鎖進程也沒有。所有進程有讀訪問權限。

LOCK_EX 排他鎖:除加鎖進程外其他進程沒有對已加鎖文件讀寫訪問權限。

LOCK_NB 非阻塞鎖:

如果指定此參數,函數不能獲得文件鎖就立即返回,否則,函數會等待獲得文件鎖。LOCK_NB可以同LOCK_SH或LOCK_NB進行按位或(|)運算操作。 fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)

下面是一個簡單的例子:#!/usr/bin/python

#coding:utf8

import?os

import?sys

import?time

import?fcntl?#導入模塊

class?FLOCK(ojbect):

def?__init__(self,name):

"""

:param?name:?文件名

"""

self.fobj?=?open(name,'w')

self.fd?=?self.fobj.fileno()

def?lock(self):

try:

fcntl.lockf(sefl.fd,fcntl.LOCK_EX|fcntl.LOCK_NB)?#給文件加鎖,使用了fcntl.LOCK_NB

print?'給文件加鎖,稍等?...?...'

time.sleep(20)

return?True

except:

print?'文件加鎖,無法執行,請稍后運行。'

retrun?False

def?unlock(self):

self.fobj.close()

print?'已解鎖'

if?__name__?==?"__main__":

print?sys.argv[1]

locker?=?FLOCK(sys.argv[1])

a?=?locker.lock()

if?a:

print?'文件已加鎖'

else:

print?'無法執行,程序已鎖定,請稍等'

執行結果:

# python suo.py test

test

file lock please waiting..... ?(在等待期間,在另一個終端,運行此程序會有下面的結果)

文件已加鎖

# python suo.py test

test

file no lock please check file...

無法執行,程序已鎖定,請稍等

##程序中使用了fcntl.LOCK_NB 所以程序會直接退出,沒有等待。

總結

以上是生活随笔為你收集整理的python print 如何加锁_python中给程序加锁之fcntl模块的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。