私はPythonのマルチプロセッシングに関する質問があります。私はデータセットを取得し、チャンクに分割し、それらのチャンクを同時に実行中のプロセスに渡そうとしています。私は、単純な計算(例えば、電気抵抗 - >サーミスタの温度)を使用して、大きなデータテーブルを変換する必要があります。Pythonの動的プロセス
以下のコードは、ほとんどの場合、必要に応じて動作しますが、新しいプロセスを生成するようには見えません(または、一度に1つしかない場合)。私はPythonには新しいので、おそらくこの問題に対する簡単な解決策があります。
ありがとうございます!
from multiprocessing import Process class Worker(Process): # example data transform def process(self, x): return (x * 2)/3 def __init__(self, list): self.data = list self.result = map(self.process, self.data) super(Worker, self).__init__() if __name__ == '__main__': start = datetime.datetime.now() dataset = range(10000) # null dataset processes = 3 for i in range(processes): chunk = int(math.floor(len(dataset)/float(processes))) if i + 1 == processes: remainder = len(dataset) % processes else: remainder = 0 tmp = dataset[i * chunk : (i + 1) * chunk + remainder] exec('worker'+str(i)+' = Worker(tmp)') exec('worker'+str(i)+'.start()') for i in range(processes): exec('worker'+str(i)+'.join()') # just a placeholder to make sure the initial values of the set are as expected exec('print worker'+str(i)+'.result[0]')
お返事ありがとうございます!しかし、Pythonは実行時に 'IndexError:list index of range'を投げています。さらに検査すると、workerX.resultが空のリストであることがわかります。私はまだマルチプロセッシングライブラリで何か不足しているようです。 –
__init__からself.result = []を削除します。 AttributeErrorを取得した場合、問題はサブプロセスを呼び出すことにあります。 IndexErrorを取得した場合、問題はデータセットにデータを取り込むことです。 print文を実行してみてください。 –