私はPython Pandasライブラリを使用して処理する複数のデータファイルを持っています。各ファイルは1つずつ処理され、タスクマネージャを見ると1つの論理プロセッサしか使用されません(それは〜95%、残りは5%以内)複数のコアを使用して複数のデータファイルを同時に処理する
データファイルを同時に処理する方法はありますか? もしそうなら、それを行うために他のロジックプロセッサを利用する方法はありますか?
(編集を歓迎します)
私はPython Pandasライブラリを使用して処理する複数のデータファイルを持っています。各ファイルは1つずつ処理され、タスクマネージャを見ると1つの論理プロセッサしか使用されません(それは〜95%、残りは5%以内)複数のコアを使用して複数のデータファイルを同時に処理する
データファイルを同時に処理する方法はありますか? もしそうなら、それを行うために他のロジックプロセッサを利用する方法はありますか?
(編集を歓迎します)
異なるスレッドまたは異なるプロセスで異なるファイルを処理することができます。プログラムがファイルを処理しないで使用することができます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
、ここに:
クイックノート:Pythonスレッドが複数のコアを使用しないように見えます。http://stackoverflow.com/questions/7542957/is-python-capable-of-running-on-マルチコアしかし、 'multiprocessing'ライブラリはそれを使用します。 – phss
素晴らしい情報、それを共有してくれてありがとう! – KimKulling
@KimKulling、コードと追加のリンクのためにタンクしてください:) –
あなたのファイル名がリストにある場合、あなたはこのコードを使用することができます
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()
'concurrent.futures.ProcessPoolExecutor'を見てください - 同じアイデアですが、慎重に頑張ってください。コーナーケースなど - https:// docs .python.org/3/library/concurrent.futures.html – jsbueno
ありがとうございます!しかし、残念ながら、それはPython 2.7では利用できないようです... – Diego
Python 2.7は7年前です。Python 3がリリースされたときにはすでにリリースされていました。 OPは彼がPython2を使用していることは言及していません。 (もちろん、同時実行を示唆する答えはPython 3だと言わなければならないでしょう) – jsbueno
を[並行処理のビデオについて](https://www.youtube.com/watch?v=Bv25Dwe84g0) – wwii
[マルチプロcessing.pool](https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.pool) – swenzel
@swenzelは私にそれを打つ。正確なものを入力しようとしていた –