import math
from multiprocessing import pool
def run(data, index, size): # data 傳入資料,index 資料分片索引,size程序數
size = math.ceil(len(data) / size)
start = size * index
end = (index + 1) * size if (index + 1) * size < len(data) else len(data)
temp_data = data[start:end]
# do something
return data # 可以返回資料,在後面收集起來
processor = 40
res =
p = pool(processor)
for i in range(processor):
print(str(i) + ' processor started !')
p.close()
p.join()
for i in res:
print(i.get()) # 使用get獲得多程序處理的結果
分檔案處理:當記憶體受限時,不能再繼續使用資料分片,因為子程序會拷貝父程序的所有狀態,導致記憶體的浪費。這時候可以考慮先把大檔案分片儲存到磁碟,然後del 釋放掉資料,接著在多程序處理的函式裡面分別讀取,這樣子程序就會分別讀取需要處理的資料,而不會占用大量記憶體。
from multiprocessing import pool
import pandas as pd
import math
data=pd.dataframe()
users=pd.dataframe(data['user_id'].unique(),columns=['user_id'])
processor=4
p=pool(processor)
l_data = len(users)
size = math.ceil(l_data / processor)
res =
def run(i):
data=pd.read_csv('../data/user_'+str(i)+'.csv')
#todo
return data
for i in range(processor):
start = size * i
end = (i + 1) * size if (i + 1) * size < l_data else l_data
user = users[start:end]
t_data = pd.merge(data, user, on='user_id').reset_index(drop=true)
t_data.to_csv('../data/user_'+str(i)+'.csv',index=false)
print(len(t_data))
del data,l_data,users
for i in range(processor):
print(str(i) + ' processor started !')
p.close()
p.join()
data = pd.concat([i.get() for i in res])
多程序資料共享:當需要修改共享的資料時,那麼這個時候可以使用資料共享:
from multiprocessing import process, manager
# 每個子程序執行的函式
# 引數中,傳遞了乙個用於多程序之間資料共享的特殊字典
def func(i, d):
d[i] = i + 100
print(d.values())
# 在主程序中建立特殊字典
m = manager()
d = m.dict()
for i in range(5):
# 讓子程序去修改主程序的特殊字典
p = process(target=func, args=(i, d))
p.start()
p.join()
------------
[100]
[100, 101]
[100, 101, 102, 103]
[100, 101, 102, 103]
[100, 101, 102, 103, 104]
python使用多程序
python多執行緒適合io密集型場景,而在cpu密集型場景,並不能充分利用多核cpu,而協程本質基於執行緒,同樣不能充分發揮多核的優勢。針對計算密集型場景需要使用多程序,python的multiprocessing與threading模組非常相似,支援用程序池的方式批量建立子程序。只需要例項化pr...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...
python多程序 Python多程序實踐
建立程序方式如下 可以通過lock鎖機制實現共享鎖,但比較常用的方式還是以上這些方式,效率更高,更安全。使用方式 構造 類方法 使用方式 構造 更多型別支援一般使用manager,支援的型別包括list,dict,namespace,lock,rlock,semaphore,boundedsemap...