Python マルチプロセッシングについて質問があります。データセットを取得し、チャンクに分割し、それらのチャンクを同時に実行中のプロセスに渡そうとしています。簡単な計算を使用して大規模なデータ テーブルを変換する必要があります (例: 電気抵抗 -> サーミスタの温度)。
以下にリストされているコードは、ほぼ希望どおりに機能しますが、新しいプロセスを生成していないようです (または、一度に 1 つだけ)。
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]')