python 多程序併發demo

2022-04-29 04:48:09 字數 1834 閱讀 9361

下午需要簡單處理乙份資料,就直接隨手寫指令碼處理了,但發現效率太低,速度太慢,就改成多程序了;

程式涉及計算、檔案讀寫,鑑於計算內容挺多的,就用多程序了(計算密集)。

import

pandas 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...