下午需要簡單處理乙份資料,就直接隨手寫指令碼處理了,但發現效率太低,速度太慢,就改成多程序了;
程式涉及計算、檔案讀寫,鑑於計算內容挺多的,就用多程序了(計算密集)。
importpandas as pd
from pathlib import
path
from concurrent.futures import
processpoolexecutor
parse_path = '
/data1/v-gazh/crsp/dsf_full_fields/parse
'source_path = '
/data1/v-gazh/crsp/dsf_full_fields/2th_split
' # 目錄中有3.3w個csv檔案,序列的話,效率大打折扣
defparsedata():
source_path_list = list(path(source_path).glob('
*.csv'))
multi_process = processpoolexecutor(max_workers=20)
multi_results =multi_process.map(func, source_path_list)
deffunc(p):
source_p =str(p)
parse_p = str(p).replace('
2th_split
', '
parse')
df =pd.read_csv(source_p)
df['date
'] = pd.to_datetime(df['
date
'].astype(str)).dt.date
df.sort_values([
'date
'], inplace=true)
#處理close為負的值(abs),新增status標識
df['
is_close
'] = df['
prc'].map(lambda x: 0 if x < 0 or pd.isna(x) else 1)
df['prc
'] = df['
prc'
].abs()
df.rename(columns=, inplace=true)
df['adj_low
'] = df['
bidlo
'] * df['
factor']
df['adj_high
'] = df['
askhi
'] * df['
factor']
df['adj_close
'] = df['
prc'] * df['
factor']
df['adj_open
'] = df['
openprc
'] * df['
factor']
df['adj_volume
'] = df['
vol'] / df['
factor']
#calc change
df['
change
'] = df['
adj_close
'].diff(1) / df['
adj_close
'].shift(1)
df.drop_duplicates(inplace=true)
df.to_csv(parse_p, index=false)
parsedata()
python多程序併發
由於python下呼叫linux的shell命令都需要等待返回,所以常常我們設定的多執行緒都達不到效果,因此在呼叫shell命令不需要返回時,使用threading模組並不是最好的方法。python提供了非常好用的多程序包multiprocessing,你只需要定義乙個函式,python會替你完成其...
python併發之多程序
一 multiprocessing模組介紹 python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在...
python併發程式設計 多程序
import os import time from multiprocessing import process def func args,args2 print args,args2 time.sleep 3 print 子程序 os.getpid print 子程序的父程序 os.getpp...