如何解决多处理池的Jupyter笔记本问题
我正在尝试在代码中应用Multiprocessing
,但遇到了example:
import multiprocessing
from itertools import product
def merge_names(a,b):
return '{} & {}'.format(a,b)
if __name__ == '__main__':
names = ['Brown','Wilson','Bartlett','Rivera','Molloy','Opie']
with multiprocessing.Pool(processes=3) as pool:
results = pool.starmap(merge_names,product(names,repeat=2))
print(results)
这应该不会超过几秒钟,但是当我在Jupyter Notebook中运行它并没有结束时,我必须为此重置内核。使用Multiprocessing
时Jupyter或Anaconda有任何特殊问题吗?
我正在使用
conda version 4.8.4
ipython version 5.8.0
解决方法
这不是一个真正的答案,但是由于注释不能很好地格式化代码,因此我将其放在此处 即使在纯python 3.8(虽然通过conda安装)中,您的代码也对我不起作用-我认为它没有连接到jupyter或ipython。
此代码对我有用:
import multiprocessing
from itertools import product
names = ['Brown','Wilson','Bartlett','Rivera','Molloy','Opie']
with multiprocessing.Pool(processes=3) as pool:
results = pool.starmap('{} & {}'.format,product(names,repeat=2))
print(results)
因此,腌制自定义函数并将其发送到池中似乎存在一些问题-我不知道原因,也不知道解决方案。
但是,如果您只需要类似的功能,建议使用joblib
from joblib import Parallel,delayed
from itertools import product
def merge_names(a,b):
return '{} & {}'.format(a,b)
names = ['Brown','Opie']
result = Parallel(n_jobs=3,prefer="processes")(delayed(merge_names)(a,b) for a,b in product(names,repeat=2))
print(result)
joblib具有类似的工作池构造,然后可以根据需要类似地使用它:
with Parallel(n_jobs=2) as parallel:
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。