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

Python多進(jìn)程寫(xiě)入同一文件的方法

 更新時(shí)間:2019年01月14日 08:51:38   作者:bluespacezero  
今天小編就為大家分享一篇Python多進(jìn)程寫(xiě)入同一文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

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

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

具體思路跟把文件輸出集中在一起也差不多,就是把進(jìn)程需要寫(xiě)入文件的內(nèi)容作為返回值返回給惠和的回調(diào)函數(shù),使用回調(diào)函數(shù)向文件中寫(xiě)入內(nèi)容。這樣做在windows下面還有一個(gè)好處,在windows環(huán)境下,python的多進(jìn)程沒(méi)有像linux環(huán)境下的多進(jìn)程一樣,linux環(huán)境下的multiprocessing庫(kù)是基于fork函數(shù),父進(jìn)程fork了一個(gè)子進(jìn)程之后會(huì)把自己的資源,比如文件句柄都傳遞給子進(jìn)程。但是在windows環(huán)境下沒(méi)有fork函數(shù),所以如果你在父進(jìn)程里打開(kāi)了一個(gè)文件,在子進(jìn)程中寫(xiě)入,會(huì)出現(xiàn)ValueError: I/O operation on closed file這樣的錯(cuò)誤,而且在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)

運(yùn)行結(jié)果如下:

Python多進(jìn)程寫(xiě)入同一文件

以上這篇Python多進(jìn)程寫(xiě)入同一文件的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • AI與Python人工智能啟發(fā)式搜索概念理解

    AI與Python人工智能啟發(fā)式搜索概念理解

    這篇文章主要為大家介紹了AI與Python啟發(fā)式搜索概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python實(shí)現(xiàn)對(duì)指定輸入的字符串逆序輸出的6種方法

    python實(shí)現(xiàn)對(duì)指定輸入的字符串逆序輸出的6種方法

    這篇文章主要介紹了python實(shí)現(xiàn)對(duì)指定輸入的字符串逆序輸出的6種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • PyTorch模型保存與加載實(shí)例詳解

    PyTorch模型保存與加載實(shí)例詳解

    大家都知道pytorch的模型和參數(shù)是分開(kāi)的,可以分別保存或加載模型和參數(shù),這篇文章主要給大家介紹了關(guān)于PyTorch模型保存與加載的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Python生成器傳參數(shù)及返回值原理解析

    Python生成器傳參數(shù)及返回值原理解析

    這篇文章主要介紹了Python生成器傳參數(shù)及返回值原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python 切片索引越界的問(wèn)題(數(shù)組下標(biāo)越界)

    Python 切片索引越界的問(wèn)題(數(shù)組下標(biāo)越界)

    Python語(yǔ)言處理字符串、數(shù)組類的問(wèn)題時(shí)有一定概率需要使用切片方法,本文主要介紹了Python 切片索引越界的問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python操作Access數(shù)據(jù)庫(kù)基本步驟分析

    Python操作Access數(shù)據(jù)庫(kù)基本步驟分析

    這篇文章主要介紹了Python操作Access數(shù)據(jù)庫(kù)基本步驟,結(jié)合實(shí)例形式詳細(xì)分析了Python針對(duì)access操作的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-09-09
  • 用 Django 開(kāi)發(fā)一個(gè) Python Web API的方法步驟

    用 Django 開(kāi)發(fā)一個(gè) Python Web API的方法步驟

    這篇文章主要介紹了用 Django 開(kāi)發(fā)一個(gè) Python Web API的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python實(shí)現(xiàn)的MySQL增刪改查操作實(shí)例小結(jié)

    python實(shí)現(xiàn)的MySQL增刪改查操作實(shí)例小結(jié)

    這篇文章主要介紹了python實(shí)現(xiàn)的MySQL增刪改查操作,結(jié)合實(shí)例形式總結(jié)分析了Python基本的mysql增刪改查及銀行賬號(hào)查詢等相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-12-12
  • python實(shí)現(xiàn)的簡(jiǎn)單窗口倒計(jì)時(shí)界面實(shí)例

    python實(shí)現(xiàn)的簡(jiǎn)單窗口倒計(jì)時(shí)界面實(shí)例

    這篇文章主要介紹了python實(shí)現(xiàn)的簡(jiǎn)單窗口倒計(jì)時(shí)界面,實(shí)例分析了Python基于Tkinter操作windows窗口界面的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • python實(shí)現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法

    python實(shí)現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06

最新評(píng)論