最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python多進程寫入同一文件的方法

 更新時間:2019年01月14日 08:51:38   作者:bluespacezero  
今天小編就為大家分享一篇Python多進程寫入同一文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

最近用python的正則表達式處理了一些文本數(shù)據(jù),需要把結果寫到文件里面,但是由于文件比較大,所以運行起來花費的時間很長。但是打開任務管理器發(fā)現(xiàn)CPU只占用了25%,上網(wǎng)找了一下原因發(fā)現(xiàn)是由于一個叫GIL的存在,使得Python在同一時間只能運行一個線程,所以只占用了一個CPU,由于我的電腦是4核的,所以CPU利用率就是25%了。

既然多線程沒有什么用處,那就可以使用多進程來處理,畢竟多進程是可以不受GIL影響的。Python提供了一個multiprocessing的多進程庫,但是多進程也有一些問題,比如,如果進程都需要寫入同一個文件,那么就會出現(xiàn)多個進程爭用資源的問題,如果不解決,那就會使文件的內容順序雜亂。這就需要涉及到鎖了,但是加鎖一般會造成程序的執(zhí)行速度下降,而且如果進程在多處需要向文件輸出,也不好把這些代碼整個都鎖起來,如果都鎖起來,那跟單進程還有什么區(qū)別。有一個解決辦法就是把向文件的輸出都整合到一塊去,在這一塊集中加個鎖,這樣問題就不大了。不過還有一種更加優(yōu)雅的解決方式:使用multiprocessing庫的回調函數(shù)功能。

具體思路跟把文件輸出集中在一起也差不多,就是把進程需要寫入文件的內容作為返回值返回給惠和的回調函數(shù),使用回調函數(shù)向文件中寫入內容。這樣做在windows下面還有一個好處,在windows環(huán)境下,python的多進程沒有像linux環(huán)境下的多進程一樣,linux環(huán)境下的multiprocessing庫是基于fork函數(shù),父進程fork了一個子進程之后會把自己的資源,比如文件句柄都傳遞給子進程。但是在windows環(huán)境下沒有fork函數(shù),所以如果你在父進程里打開了一個文件,在子進程中寫入,會出現(xiàn)ValueError: I/O operation on closed file這樣的錯誤,而且在windows環(huán)境下最好加入if __name__ == '__main__'這樣的判斷,以避免一些可能出現(xiàn)的RuntimeError或者死鎖。

下面是代碼:

from multiprocessing import Pool
import time


def mycallback(x):
  with open('123.txt', 'a+') as f:
    f.writelines(str(x))


def sayHi(num):
  return num


if __name__ == '__main__':
  e1 = time.time()
  pool = Pool()

  for i in range(10):
    pool.apply_async(sayHi, (i,), callback=mycallback)

  pool.close()
  pool.join()
  e2 = time.time()
  print float(e2 - e1)

運行結果如下:

Python多進程寫入同一文件

以上這篇Python多進程寫入同一文件的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python中字符串比較使用is、==和cmp()總結

    python中字符串比較使用is、==和cmp()總結

    在Python中比較字符串最好是使用簡單邏輯操作符,今天為大家講解一下is、==和cmp()使用總結
    2018-03-03
  • python爬蟲_實現(xiàn)校園網(wǎng)自動重連腳本的教程

    python爬蟲_實現(xiàn)校園網(wǎng)自動重連腳本的教程

    下面小編就為大家分享一篇python爬蟲_實現(xiàn)校園網(wǎng)自動重連腳本的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python3利用Dlib19.7實現(xiàn)攝像頭人臉識別的方法

    Python3利用Dlib19.7實現(xiàn)攝像頭人臉識別的方法

    這篇文章主要介紹了Python 3 利用 Dlib 19.7 實現(xiàn)攝像頭人臉識別 ,利用python開發(fā),借助Dlib庫捕獲攝像頭中的人臉,提取人臉特征,通過計算歐氏距離來和預存的人臉特征進行對比,達到人臉識別的目的,感興趣的小伙伴們可以參考一下
    2018-05-05
  • PyTorch中flatten()?函數(shù)的用法實例小結

    PyTorch中flatten()?函數(shù)的用法實例小結

    在PyTorch中,flatten函數(shù)的作用是將一個多維的張量轉換為一維的向量,它可以將任意形狀的張量轉換為一維,而不需要指定轉換后的大小,這篇文章主要介紹了PyTorch中flatten()?函數(shù)的用法,需要的朋友可以參考下
    2023-11-11
  • python中Genarator函數(shù)用法分析

    python中Genarator函數(shù)用法分析

    這篇文章主要介紹了python中Genarator函數(shù)用法,實例分析了Genarator函數(shù)的使用原理與相關技巧,需要的朋友可以參考下
    2015-04-04
  • python循環(huán)控制之break和continue流程控制語句

    python循環(huán)控制之break和continue流程控制語句

    這篇文章主要介紹了python循環(huán)控制之break流程控制語句,Python中提供了兩個關鍵字用來控制循環(huán)語句,分別是break和continue,本文都有介紹,需要的朋友可以參考一下
    2022-03-03
  • Python使用POP3和SMTP協(xié)議收發(fā)郵件的示例代碼

    Python使用POP3和SMTP協(xié)議收發(fā)郵件的示例代碼

    這篇文章主要介紹了Python使用POP3和SMTP協(xié)議收發(fā)郵件的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Python拆分大型CSV文件代碼實例

    Python拆分大型CSV文件代碼實例

    這篇文章主要介紹了Python拆分大型CSV文件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • python 如何在list中找Topk的數(shù)值和索引

    python 如何在list中找Topk的數(shù)值和索引

    這篇文章主要介紹了python 如何在list中找Topk的數(shù)值和索引的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • PyChon中關于Jekins的詳細安裝(推薦)

    PyChon中關于Jekins的詳細安裝(推薦)

    這篇文章主要介紹了PyChon中關于Jekins的詳細安裝(推薦),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論

喀什市| 长岛县| 伊宁县| 竹北市| 乌恰县| 长武县| 通化市| 山西省| 隆化县| 灵川县| 青铜峡市| 清水县| 黑龙江省| 怀集县| 手游| 奉贤区| 普宁市| 长子县| 临泉县| 秦安县| 吉隆县| 阿勒泰市| 启东市| 侯马市| 忻州市| 平顺县| 岳池县| 合阳县| 桓台县| 盘山县| 长子县| 安图县| 淮滨县| 商都县| 镇坪县| 开封县| 东丽区| 蕉岭县| 浦江县| 北海市| 临夏县|