起因
python處理一下資料,大概有六七個g,然後再存到另外乙個檔案中,單執行緒跑起來發現太慢了,資料總量大概是千萬行的級別,然後每秒鐘只能處理不到20行……遂想怎麼提高一下速度
嘗試1-multiprocessing
**如下:
from multiprocessing.dummy import pool as threadpool
pool = threadpool(20)
pool.map(func_name, args)
pool.close()
pool.join()
這裡參考了這篇文章,然後嘗試了一下,發現速度並沒有多少提示,看了一下資源使用率,只佔滿了1個核,不能滿足要求
嘗試2-dask
**如下:
from dask import delayed
import dask.bag as db
l =
for fn in encrypt_files:
b = db.read_text(fn)
a = delayed(decrypt_file)(fn) # delay execution of function
result = delayed(l)
result.compute()
這個地方參考了這篇文章,但是嘗試了一下,還是只跑了乙個核,依然失敗
嘗試3-pp
**如下:
cpu_num = 1
job_server = pp.server(cpu_num)
a =
for f in fn:
for x in a:
tmp = x()
這裡參考這篇文章,測試了一下,可以跑滿多個核心,其使用的cpu核心數量就是設定的那個數量。
但是也存在乙個問題,就是程式跑一段時間後就會效率下降,監控一下cpu發現也只剩下乙個核心在跑了,目前還不知道是什麼原因,也沒有深究
對比平時最常有的應該是multiprocessing模組,網上的資料大多也都是這個,做資料分析的可能dask模組會用到,pp模組就更少了。但是實際上在我這裡測試,前兩者達不到我的要求,其最多也跑了乙個核心,不知道是不是我**使用的問題。
至於pp模組,需要注意的是全域性變數的定義,可能需要在函式裡重新定義,不然可能會提示變數未定義的錯誤。
過程其實最終也沒有達到我的要求,還存在著一部分問題,可能最終還是需要靠集群去實現這個方案。
感想圍觀v2的帖子,發現其實找出瓶頸才是最關鍵的…最終發現我的瓶頸是在處理資料的部分,rsa解密太耗時了,然後就應該考慮怎麼提高這部分效率。
有人說換語言,實際上提高十倍也並不滿足這個要求,可能提高十倍效率同時使用多核心可以滿足…這個時候就該考慮換個思路了
比方說用集群(還未實現),或則說直接換語言,同時跑多核心。
ps感謝各位熱心網友
python多程序處理大資料
主要用到multiprocessing庫,思想是將大資料讀入記憶體,然後切片儲存,然後多程序分別處理分片。from multiprocessing import pool import math import os 讀取資料 path os.path.join os.getcwd test.txt ...
python 大資料處理小結
1.shop min shop.drop category id longitude latitude price axis 1 pandas中刪除多個列 2.mall shop min.drop duplicates subset mall id pandas中將某一列去重 3.python寫檔案...
Vaex處理大資料的Python庫
隨著社會的發展,5g和雲技術的普及,資料也越來越方便蒐集儲存。隨之而來的就是資料越來越大,資料科學家面對 50gb 甚至 500gb 大小的資料集的情況變得越來越普遍。海量資料的處理也變的越來困難和重要。本文推薦處理大資料的乙個python庫,vaex。vaex 是乙個開源的資料框架庫 類似於pan...