欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

對Python的多進程鎖的使用方法詳解

 更新時間:2019年02月18日 14:27:38   作者:田野上的希望  
今天小編就為大家分享一篇對Python的多進程鎖的使用方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

很多時候,我們需要在多個進程中同時寫一個文件,如果不加鎖機制,就會導致寫文件錯亂

這個時候,我們可以使用multiprocessing.Lock()

我一開始是這樣使用的:

import multiprocessing
lock = multiprocessing.Lock()
class MatchProcess(multiprocessing.Process):
  def __init__(self, threadId, mfile, lock):
    multiprocessing.Process.__init__(self)
    self.threadId = threadId
    self.mfile = mfile
    self.lock = lock
  def run(self):
    while True:
       self.lock.acquire()
       try:
         self.mfile.write('111111111111111111' + '\n')
       finally:
         self.lock.release()
 
if __name__ == '__main__':
  mf = open('test.lst', 'w')
  for i in range(15):
    p = MatchProcess(i, mf, lock)
    p.start() 

發(fā)現(xiàn)這種方式,鎖并沒有起作用, 文件內容依然出現(xiàn)了錯亂(注意,我這里寫的1111是示例,我的代碼實際寫的其他內容)

所以這種方式,雖然lock通過參數(shù)傳到了每個進程中,但是我們知道進程之間是不共享內存的,所以我理解應該是每個進程獲得的鎖其實是不同的, 所以無法對寫文件起到加鎖的效果

進程池是否可行呢,于是做了如下嘗試

def run(line):
  lock.acquire()
    try:
      mfile.write('111111111111111111' + '\n')
  finally:
    lock.release()
sf = open('test.lst', 'r')
data_lst = list()
for line in sf: 
  line = line.strip()
  data_lst.append(line)
pool = Pool(15)
pool.map_async(run, data_lst) #map_async方法會將data_lst這個可迭代的對象里面的每個元素依次傳入run方法來執(zhí)行
pool.close()
pool.join()
print 'over'

但是注意:

pool.close()
pool.join()

這兩行代碼必不可少,否則,主進程執(zhí)行完畢后會退出,導致整個進程結束

所以在整個進程全部執(zhí)行完畢后,才會打印出over

但是這種方式,發(fā)現(xiàn),鎖仍然不起作用

最后采用了如下方式:

def run(line):
  mfile = open('test2.lst', 'a')
  lock.acquire()
  try:
    mfile.write('111111111111111111' + '\n')
  finally:
    lock.release()
 
sf = open('test.lst', 'r')
data_lst = list()
for line in sf: 
  line = line.strip()
  data_lst.append(line)
 
pList = []
for line in line_lst:
  p = multiprocessing.Process(target=run, args=(line, lock))
  p.start()
  pList.append(p)
 
for p in pList:
  p.join()

是親測發(fā)現(xiàn),這種方式,鎖的確起作用了,在每次寫入數(shù)據(jù)量很大的情況下,速度很慢

但是一個比較惡心的問題是,我一開始試圖將文件打開后通過Process對象的args參數(shù)傳入到run方法中,但是發(fā)現(xiàn)數(shù)據(jù)無法寫入到文件中,見鬼,這個問題我還沒搞明白

無耐,只能采取上面的笨方法,在每次寫入的時候打開然后寫入,這肯定不是明智的做法,如果有更好的辦法,請留言我

也就是說,文件打開后傳入,是無效的,那么可以將文件名傳入,然后在run方法中每次寫的時候先打開,寫入后關閉應該也是可行的。

但是為什么我文章采用的第一種方式,也是文件打開后傳入,卻是可行的。

以上這篇對Python的多進程鎖的使用方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 八個超級好用的Python自動化腳本(小結)

    八個超級好用的Python自動化腳本(小結)

    每天你都可能會執(zhí)行許多重復的任務,例如閱讀新聞、發(fā)郵件、查看天氣、打開書簽、清理文件夾等等,本文主要介紹了Python自動化腳本,具有一定的參考價值,感興趣的可以了解一下
    2022-07-07
  • python庫umap有效地揭示高維數(shù)據(jù)的結構和模式初探

    python庫umap有效地揭示高維數(shù)據(jù)的結構和模式初探

    這篇文章主要介紹了python庫umap有效地揭示高維數(shù)據(jù)的結構和模式初探,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python3里的super()和__class__使用介紹

    Python3里的super()和__class__使用介紹

    這篇文章主要介紹了Python3里的super()和__class__使用介紹,本文用實例講解了這兩個方法之間的關系,需要的朋友可以參考下
    2015-04-04
  • python3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法

    python3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猵ython3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • jupyter lab無法導入graphviz模塊方式

    jupyter lab無法導入graphviz模塊方式

    今天小編就為大家分享一篇jupyter lab無法導入graphviz模塊方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Django發(fā)送郵件功能實例詳解

    Django發(fā)送郵件功能實例詳解

    在本篇文章里小編給大家整理了關于Django發(fā)送郵件功能的詳細內容,有需要的朋友們可以參考學習下。
    2019-09-09
  • PyTorch的深度學習入門之PyTorch安裝和配置

    PyTorch的深度學習入門之PyTorch安裝和配置

    這篇文章主要介紹了PyTorch的深度學習入門之PyTorch安裝和配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Python?pandas中apply函數(shù)簡介以及用法詳解

    Python?pandas中apply函數(shù)簡介以及用法詳解

    apply()函數(shù)是pandas里面所有函數(shù)中自由度最高的函數(shù), apply()函數(shù)的參數(shù)是一個函數(shù)指針,這里可以使用lambda表達式幫助簡化代碼,下面這篇文章主要給大家介紹了關于Python?pandas中apply函數(shù)簡介以及用法的相關資料,需要的朋友可以參考下
    2022-09-09
  • Python多進程編程技術實例分析

    Python多進程編程技術實例分析

    這篇文章主要介紹了Python多進程編程技術,包括了線程、隊列、同步等概念及相關的技巧總結,需要的朋友可以參考下
    2014-09-09
  • Python 如何實時向文件寫入數(shù)據(jù)(附代碼)

    Python 如何實時向文件寫入數(shù)據(jù)(附代碼)

    這篇文章主要介紹了Python 如何實時向文件寫入數(shù)據(jù)(附代碼),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論