多处理池的 Jupyter Notebook 问题
Jupyter notebook issues with Multiprocessing Pool
我正在尝试在我的代码中应用 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)
因此,pickle 自定义函数并将其发送到池中似乎存在一些问题 - 我不知道原因,也不知道解决方案。
但是如果你只是需要类似的功能,我推荐joblib
from joblib import Parallel, delayed
from itertools import product
def merge_names(a, b):
return '{} & {}'.format(a, b)
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', '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:
...
我正在尝试在我的代码中应用 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)
因此,pickle 自定义函数并将其发送到池中似乎存在一些问题 - 我不知道原因,也不知道解决方案。
但是如果你只是需要类似的功能,我推荐joblib
from joblib import Parallel, delayed
from itertools import product
def merge_names(a, b):
return '{} & {}'.format(a, b)
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', '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:
...