2017-01-16 5 views
1

私はPython Pandasライブラリを使用して処理する複数のデータファイルを持っています。各ファイルは1つずつ処理され、タスクマネージャを見ると1つの論理プロセッサしか使用されません(それは〜95%、残りは5%以内)複数のコアを使用して複数のデータファイルを同時に処理する

データファイルを同時に処理する方法はありますか? もしそうなら、それを行うために他のロジックプロセッサを利用する方法はありますか?

(編集を歓迎します)

+0

を[並行処理のビデオについて](https://www.youtube.com/watch?v=Bv25Dwe84g0) – wwii

+1

[マルチプロcessing.pool](https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.pool) – swenzel

+0

@swenzelは私にそれを打つ。正確なものを入力しようとしていた –

答えて

0

異なるスレッドまたは異なるプロセスで異なるファイルを処理することができます。プログラムがファイルを処理しないで使用することができます2子・プロセスを開始します

from multiprocessing import Process 

def process_panda(filename): 
    # this function will be started in a different process 
    process_panda_import() 
    write_results() 

if __name__ == '__main__': 
    p1 = Process(target=process_panda, args=('file1',)) 
    # start process 1 
    p1.start() 
    p2 = Process(target=process_panda, args=('file2',)) 
    # starts process 2 
    p2.start() 
    # waits if process 2 is finished 
    p2.join() 
    # waits if process 1 is finished 
    p1.join() 

のpythonの良いところは、そのフレームワークは、あなたがこれを行うためのツールを提供することです。 ソースの場合、スレッドと同様のことができます。

あなたがここにドキュメントを見つけることができます。 https://docs.python.org/2/library/multiprocessing.html

、ここに:

https://pymotw.com/2/threading/

+2

クイックノート:Pythonスレッドが複数のコアを使用しないように見えます。http://stackoverflow.com/questions/7542957/is-python-capable-of-running-on-マルチコアしかし、 'multiprocessing'ライブラリはそれを使用します。 – phss

+0

素晴らしい情報、それを共有してくれてありがとう! – KimKulling

+1

@KimKulling、コードと追加のリンクのためにタンクしてください:) –

0

あなたのファイル名がリストにある場合、あなたはこのコードを使用することができます

from multiprocessing import Process 

def YourCode(filename, otherdata): 
    # Do your stuff 

if __name__ == '__main__': 
    #Post process files in parallel 
    ListOfFilenames = ['file1','file2', ..., 'file1000'] 
    ListOfProcesses = [] 
    Processors = 20 # n of processors you want to use 
    #Divide the list of files in 'n of processors' Parts 
    Parts = [ListOfFilenames[i:i + Processors] for i in xrange(0, len(ListOfFilenames), Processors)] 

    for part in Parts: 
     for f in part: 
      p = multiprocessing.Process(target=YourCode, args=(f, otherdata)) 
      p.start() 
      ListOfProcesses.append(p) 
     for p in ListOfProcesses: 
      p.join() 
+2

'concurrent.futures.ProcessPoolExecutor'を見てください - 同じアイデアですが、慎重に頑張ってください。コーナーケースなど - https:// docs .python.org/3/library/concurrent.futures.html – jsbueno

+0

ありがとうございます!しかし、残念ながら、それはPython 2.7では利用できないようです... – Diego

+0

Python 2.7は7年前です。Python 3がリリースされたときにはすでにリリースされていました。 OPは彼がPython2を使用していることは言及していません。 (もちろん、同時実行を示唆する答えはPython 3だと言わなければならないでしょう) – jsbueno

関連する問題