更新:将我的 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()