Kon*_*ick 12 multiprocessing jupyter-notebook python-3.6
我来这里是因为我的 Jupiter 的 Python3 笔记本有问题。我需要创建一个使用多处理库的函数。在实现它之前,我做了一些测试。我发现了很多不同的例子,但问题每次都是一样的:我的代码已执行,但笔记本界面中没有任何反应:

我尝试在 jupyter 上运行的代码是这样的:
import os
from multiprocessing import Process, current_process
def doubler(number):
"""
A doubling function that can be used by a process
"""
result = number * 2
proc_name = current_process().name
print('{0} doubled to {1} by: {2}'.format(
number, result, proc_name))
return result
if __name__ == '__main__':
numbers = [5, 10, 15, 20, 25]
procs = []
proc = Process(target=doubler, args=(5,))
for index, number in enumerate(numbers):
proc = Process(target=doubler, args=(number,))
proc2 = Process(target=doubler, args=(number,))
procs.append(proc)
procs.append(proc2)
proc.start()
proc2.start()
proc = Process(target=doubler, name='Test', args=(2,))
proc.start()
procs.append(proc)
for proc in procs:
proc.join()
Run Code Online (Sandbox Code Playgroud)
当我在没有 Jupyter 的情况下运行我的代码但使用命令“python my_progrem.py”时,我可以看到日志:

对于我的示例,在 Jupyter 中,是否有一种方法可以在我可以在之后使用的变量/对象中捕获我的两个任务(proc1 和 proc2,它们都调用函数“doubler”)的结果?如果“是”,我该怎么做?
@Konate 的回答对我很有帮助。这是使用multiprocessing.pool的简化版本:
import multiprocessing
def double(a):
return a * 2
def driver_func():
PROCESSES = 4
with multiprocessing.Pool(PROCESSES) as pool:
params = [(1, ), (2, ), (3, ), (4, )]
results = [pool.apply_async(double, p) for p in params]
for r in results:
print('\t', r.get())
Run Code Online (Sandbox Code Playgroud)
我通过使用 multiprocessing.pool 取得了成功。我受到这种方法的启发:
def test():
PROCESSES = 4
print('Creating pool with %d processes\n' % PROCESSES)
with multiprocessing.Pool(PROCESSES) as pool:
TASKS = [(mul, (i, 7)) for i in range(10)] + \
[(plus, (i, 8)) for i in range(10)]
results = [pool.apply_async(calculate, t) for t in TASKS]
imap_it = pool.imap(calculatestar, TASKS)
imap_unordered_it = pool.imap_unordered(calculatestar, TASKS)
print('Ordered results using pool.apply_async():')
for r in results:
print('\t', r.get())
print()
print('Ordered results using pool.imap():')
for x in imap_it:
print('\t', x)
Run Code Online (Sandbox Code Playgroud)
...等更多,代码在:https : //docs.python.org/3.4/library/multiprocessing.html?
| 归档时间: |
|
| 查看次数: |
26768 次 |
| 最近记录: |