利用fcntl模塊對Python腳本實現單例運行

平時寫python腳本,需要控制當前腳本實例只能單例運行,比如一個執行重任務的腳本執行需要消耗大量服務資源或者會出現併發問題的話,那麼需要在同一時間控制只能有一個進程運行腳本。

Python的fcntl提供了對文件描述符進行文件控制和IO控制的能力。它是unix系統的fcntl() 和 ioctl()的接口。

fcntl模塊提供瞭如下方法:

  1. fcntl() : 對文件描述符執行’cmd’操作,'cmd’值與操作系統有關,具體可以查看linux的fcntl(2)
  2. flock() :對文件描述符進行上鎖,具體可以參考linux的flock(2)
  3. ioctl() :
  4. lockf() : 對fcntl() 進行鎖定包裝調用。'fd’是要鎖定或者解鎖的文件描述符,並且可用下列的值來進行操作:
    LOCK_UN-解鎖
    LOCK_SH-獲取共享鎖
    LOCK_EX-獲取獨佔鎖

具體對Python腳本單例執行控制代碼如下:

import fcntl

if __name__ == '__main__':
	f = open('./statistic.py', 'r')
    try:
        fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except BlockingIOError as e:
        print('當前有任務在進行中')
        exit()
   	# do something...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章