Python串行執(zhí)行


正文共:1566?字

預(yù)計閱讀時間:?4?分鐘

工作中遇到一個需求就是必須順序執(zhí)行完一些python方法痕慢,這些方法其原理都是調(diào)用原本就有的shell命令對系統(tǒng)進(jìn)行相關(guān)的操作颤介,但每個shell命令之間是有比較強(qiáng)的依賴的守伸,比如B腳本要正常執(zhí)行右蒲,就必須先成功執(zhí)行了A腳本挺邀,此時就必須在邏輯上確保A腳本對應(yīng)的python方向比B腳本對應(yīng)的python方法是先執(zhí)行的蝠嘉。

雖然說python本身是單線程的,但因?yàn)樵鹃_發(fā)的python系統(tǒng)比較復(fù)雜荚守,所以為了確保絕對的串行運(yùn)行珍德,需要顯示的通過相應(yīng)的邏輯來保證练般,這是使用鎖的一個絕佳處境。

鎖的運(yùn)用

鎖的樸素原理很簡單菱阵,一個資源被鎖鎖住了踢俄,其他進(jìn)程沒有相應(yīng)的鑰匙就無法獲得這個資源,如果該進(jìn)程一定需要這個資源晴及,那么就需要等待其他擁有鎖的進(jìn)程使用完后都办,釋放出來給自己,然后才能繼續(xù)執(zhí)行虑稼。

那為了實(shí)現(xiàn)邏輯上的串行調(diào)用琳钉,利用鎖就可以輕松實(shí)現(xiàn),依舊是A腳本對應(yīng)的方法A要比B腳本對應(yīng)的方法B先調(diào)用蛛倦,那么方法A調(diào)用時歌懒,將資源使用鎖鎖住,只用正在使用該資源的方法A具有鎖的鑰匙溯壶,只有等方法A執(zhí)行完及皂,釋放鎖后,方法B才能獲得鑰匙去調(diào)用相應(yīng)的鎖且改。

這里通過threading中的Lock來實(shí)現(xiàn)一個鎖验烧,通過裝飾器的寫法實(shí)現(xiàn)一個裝飾器,實(shí)現(xiàn)對方法加鎖又跛,如果方法沒有執(zhí)行完碍拆,鎖就不會釋放,此時其他方法就不能繼續(xù)執(zhí)行慨蓝。具體代碼如下:

  1. from threading import Lock


  2. # Program Lock. Program running when it get the program lock

  3. lock = Lock()

  4. def use_lock(func):

  5. ? ?def wrapper(*args, **kwargs):

  6. ? ? ? ?# get lock

  7. ? ? ? ?if lock.acquire():

  8. ? ? ? ? ? ?try:

  9. ? ? ? ? ? ? ? ?print('%s [%f]'%(func.__name__, time.time()))

  10. ? ? ? ? ? ? ? ?return func(*args, **kwargs)

  11. ? ? ? ? ? ? ? ?print('%s [%f]' % (func.__name__, time.time()))

  12. ? ? ? ? ? ?except:

  13. ? ? ? ? ? ? ? ?print('func [%s] error'%(func.__name__))

  14. ? ? ? ? ? ? ? ?raise

  15. ? ? ? ? ? ?finally:

  16. ? ? ? ? ? ? ? ?# release lock, avoid dead lock

  17. ? ? ? ? ? ? ? ?lock.release()

  18. ? ?return wrapper

使用的使用感混,如下:

  1. @use_lock

  2. def _start(self, mode):

  3. ...

為了確保python是串行運(yùn)行對應(yīng)的方法的,這里使用list將方法存放起來礼烈,然后順序傳參調(diào)用弧满,因?yàn)檎{(diào)用的方法被use_lock裝飾器裝飾了,所以當(dāng)?shù)谝粋€方法在運(yùn)行時济丘,第二個方法是無法運(yùn)行的谱秽,而且通過順序獲取list中方法的方式,也很好的提現(xiàn)串行執(zhí)行的想法摹迷,具體代碼如下:

  1. def startServer(self):

  2. ? '''

  3. ? first, start ssdb

  4. ? second, start sgame

  5. ? :return:

  6. ? '''

  7. ? try:

  8. ? ? ? #順序調(diào)用有所的方法

  9. ? ? ? funcs = [self._start, self._start]

  10. ? ? ? #參數(shù)

  11. ? ? ? params = [('xxx1',), ('xxx2',)]

  12. ? ? ? # sequential execute

  13. ? ? ? for funcp in zip(funcs, params):

  14. ? ? ? ? ? code,info = funcp[0](*funcp[1])


  15. ? ? ? ? ? if code == errorcode:

  16. ? ? ? ? ? ? ? return rt_pt(errorcode, 'ssdb and sgame start fail')

  17. ? ? ? return rt_pt(successcode, 'ssdb and sgame start success')

  18. ? except:

  19. ? ? ? print(traceback.print_exc())

  20. ? ? ? return rt_pt(errorcode, 'ssdb and sgame start fail')

小結(jié)

通過鎖和list具有順序的特性疟赊,將方法強(qiáng)行串行執(zhí)行,讓強(qiáng)依賴方法之間的正常使用峡碉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末近哟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鲫寄,更是在濱河造成了極大的恐慌吉执,老刑警劉巖疯淫,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戳玫,居然都是意外死亡熙掺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門咕宿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來币绩,“玉大人,你說我怎么就攤上這事府阀±铝停” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵试浙,是天一觀的道長董瞻。 經(jīng)常有香客問我,道長田巴,這世上最難降的妖魔是什么钠糊? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮壹哺,結(jié)果婚禮上眠蚂,老公的妹妹穿的比我還像新娘。我一直安慰自己斗躏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布昔脯。 她就那樣靜靜地躺著啄糙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪云稚。 梳的紋絲不亂的頭發(fā)上隧饼,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音静陈,去河邊找鬼燕雁。 笑死,一個胖子當(dāng)著我的面吹牛鲸拥,可吹牛的內(nèi)容都是我干的拐格。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼刑赶,長吁一口氣:“原來是場噩夢啊……” “哼捏浊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撞叨,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤金踪,失蹤者是張志新(化名)和其女友劉穎浊洞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胡岔,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡法希,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了靶瘸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苫亦。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奕锌,靈堂內(nèi)的尸體忽然破棺而出著觉,到底是詐尸還是另有隱情,我是刑警寧澤惊暴,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布饼丘,位于F島的核電站,受9級特大地震影響辽话,放射性物質(zhì)發(fā)生泄漏肄鸽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一油啤、第九天 我趴在偏房一處隱蔽的房頂上張望典徘。 院中可真熱鬧,春花似錦益咬、人聲如沸逮诲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梅鹦。三九已至,卻和暖如春冗锁,著一層夾襖步出監(jiān)牢的瞬間齐唆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工冻河, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箍邮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓叨叙,卻偏偏與公主長得像锭弊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摔敛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容