更新: Spyder を 5.0.5 に更新した後、動作しています。みんな、ありがとう!
マルチプロセッシングを使用してループを高速化しようとしています。以下のコードは、10000 個のランダムなベクトルを生成することを目的としています。
私のアイデアは、タスクを 5 つのプロセスに分割し、result
. ただし、コードを実行すると空のリストが返されました。
result = add_one(result)
しかし、関数で削除するrandomize_data
と、コードは完全に実行されます。したがって、エラーは、マルチプロセッシング内で他のモジュール ( ) の関数を使用したことが原因である必要がありますTesting.test
。
からのadd_one
関数は次のTesting.test
とおりです。
def add_one(x):
return x+1
プロセス内で他のモジュールの関数を使用するにはどうすればよいですか? ありがとうございました。
import multiprocessing
import numpy as np
import pandas as pd
def randomize_data(mean, cov, n_init, proc_num, return_dict):
result = pd.DataFrame()
for _ in range(n_init):
temp = np.random.multivariate_normal(mean, cov)
result = result.append(pd.Series(temp), ignore_index=True)
result = add_one(result)
return_dict[proc_num] = result
if __name__ == "__main__":
from Testing.test import add_one
mean = np.arange(0, 1, 0.1)
cov = np.identity(len(mean))
manager = multiprocessing.Manager()
return_dict = manager.dict()
jobs = []
for i in range(5):
p = multiprocessing.Process(target=randomize_data, args=(mean, cov, 2000, i, return_dict, ))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
result = return_dict.values()