第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python Pandas 線程讀取 read_fwf

Python Pandas 線程讀取 read_fwf

Go
千萬(wàn)里不及你 2021-09-14 10:21:32
新手-ish python/pandas 用戶在這里。我一直在嘗試在 read_fwf 中使用 chunksize arg 并迭代 value_counts 變量。我編寫(xiě)了一個(gè)函數(shù)來(lái)傳遞參數(shù),例如文件迭代器和變量來(lái)解析和計(jì)數(shù)。我希望并行化這個(gè)函數(shù),并能夠同時(shí)將 2 個(gè)文件讀入同一個(gè)函數(shù)。它似乎確實(shí)有效……但是,我的速度出乎意料地變慢了。線程在同一時(shí)間完成,但一個(gè)似乎正在減慢另一個(gè)(IO 瓶頸?)。通過(guò)按順序而不是并行運(yùn)行函數(shù)(324 秒對(duì) 172 秒),我得到了更快的時(shí)間。想法?我在執(zhí)行這個(gè)錯(cuò)誤嗎?我試過(guò)多進(jìn)程但啟動(dòng)映射錯(cuò)誤,我無(wú)法腌制文件迭代器(read_fwf 的輸出)。testdf1=pd.read_fwf(filepath_or_buffer='200k.dat',header=None,colspecs=wlist,names=nlist,dtype=object,na_values=[''],chunksize=1000)    testdf2=pd.read_fwf(filepath_or_buffer='200k2.dat',header=None,colspecs=wlist,names=nlist,dtype=object,na_values=[''],chunksize=1000)def tfuncth(df,varn,q,*args):    td={}    for key in varn.keys():        td[key]=pd.Series()    for rdf in df:        if args is not None:            for arg in args:                rdf=eval(f"rdf.query(\"{arg}\")")        for key in varn.keys():            ecode=f'rdf.{varn[key]}.value_counts()'            td[key]=pd.concat([td[key],eval(ecode)])            td[key]=td[key].groupby(td[key].index).sum()    for key in varn.keys():        td[key]=pd.DataFrame(td[key].reset_index()).rename(columns={'index':'Value',0:'Counts'}).assign(Var=key,PCT=lambda x:round(x.Counts/x.Counts.sum()*100,2))[['Var','Value','Counts','PCT']]    q.put(td)  bands={        '1':'A',        '2':'B',        '3':'C',        '4':'D',        '5':'E',        '6':'F',        '7':'G',        '8':'H',        '9':'I'    }    vdict={        'var1':'e1270.str.slice(0,2)',        'var2':'e1270.str.slice(2,3)',        'band':'e7641.str.slice(0,1).replace(bands)'    }更新:經(jīng)過(guò)大量閱讀,這也是我得出的結(jié)論。這是非常簡(jiǎn)單的結(jié)論,我敢肯定,所以如果有人知道,請(qǐng)告訴我。Pandas 不是一個(gè)完全多線程友好的包顯然有一個(gè)名為 'dask' 的包,它復(fù)制了很多 Pandas 函數(shù)。所以我會(huì)調(diào)查一下。在許多情況下,Python 并不是真正的多線程兼容語(yǔ)言因此,諸如“dask”之類的包可以利用多線程。可以分離多個(gè)線程,但只能并行非 CPU 綁定函數(shù)。我的代碼是用 IO 和 CPU 包裝的。簡(jiǎn)單的 IO 可能是并行運(yùn)行的,但會(huì)等待處理器執(zhí)行。我計(jì)劃通過(guò)編寫(xiě)僅 IO 操作并嘗試線程來(lái)測(cè)試這一點(diǎn)。Python 受其編譯器的約束。在純 python 中,它被 GIL 解釋和綁定,一次只執(zhí)行一個(gè)線程Python 可以使用在線程上沒(méi)有全局解釋器鎖 (GIL) 的不同編譯器進(jìn)行編譯。
查看完整描述

1 回答

?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

我確實(shí)設(shè)法通過(guò)使用多處理包來(lái)解決這個(gè)問(wèn)題并解決我的問(wèn)題。我遇到了兩個(gè)問(wèn)題。
1) multiprocessing 包與 Juypter Notebook 不兼容

2)你不能pickle一個(gè)pandas閱讀器的句柄(傳遞給進(jìn)程的多處理pickles對(duì)象)。

我通過(guò)在 Notebook 環(huán)境之外編碼來(lái)修復(fù) 1,我通過(guò)將打開(kāi)分塊文件所需的參數(shù)傳遞給每個(gè)進(jìn)程并讓每個(gè)進(jìn)程開(kāi)始自己的塊讀取來(lái)修復(fù) 2。

完成這兩件事后,我的速度比順序運(yùn)行提高了 60%。



查看完整回答
反對(duì) 回復(fù) 2021-09-14
  • 1 回答
  • 0 關(guān)注
  • 317 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)