2016-03-20 4 views
0

私はyahoo financeから引き出したいシンボルのリストを含むcsvファイルを持っています。 1 symbolを引っ張るとcsvにそれを保存するために3秒 - (約3000それらの)ファイルをダウンロードするためのPythonでのマルチプロセッシング/マルチスレッディング

df = pandas.read_csv('ticker_file.csv') 
start = datetime.datetime(2010, 1, 1) 
end = datetime.datetime.today() 

for each_code in df['Symbol']: # got it from pandas website "Remote Data Access" 
    get_prices = web.DataReader(each_code, 'yahoo', start, end) 
    get_prices.to_csv(each_code + '.csv') 

それは約2.5かかります。

私はこのプロセスを速めるためにマルチプロセッシング/ハイパースレッディングを使用することが可能か早くなると思いますか?

答えて

1

非常に簡単に作業者のマルチプロセッシングプールを使用できます。 https://docs.python.org/2/library/multiprocessing.htmlと与えられた最初の例(5人の労働者のプールを使用)を見てください。これは次のようになります。

def f(each_code): 
    start = datetime.datetime(2010, 1, 1) 
    end = datetime.datetime.today() 
    get_prices = web.DataReader(each_code, 'yahoo', start, end) 
    get_prices.to_csv(each_code + '.csv') 

p = Pool(20) 
p.map(f, df['Symbol']) 

スピードアップするかどうかはわかりません。ウェブサイトが不平を言っていない限り、可能性が高いです。

+1

注: 'each_code'と' each_ticker'の間にタイプミスがあったと仮定したので、すべてを 'each_code'だけ使用しました – pyInTheSky

+1

' get_prices.to_csv'がデータを破損または上書きする危険性があります。 csvに書き込むには、行を親に戻す方が安全です。その場合、 'imap_unordered'は良い選択です。 – tdelaney

+1

確かに、一見したところでは、一意のファイルが各ティッカーのために書かれていることに気が付いたので、ファイルに書き込もうとする衝突はありません。ソリューションを過度に複雑にする – pyInTheSky

関連する問題