【python】解决 multiprocessing 在 jupyter notebook 中不工作的问题

解决 multiprocessing 在 jupyter notebook 中不工作的问题
转载自:stackoverflow

问题复现

原始代码

import multiprocessing  
import random
from multiprocessing.pool import Pool

def prime_factor(value):
    factors = []
    for divisor in range(2, value-1):
        quotient, remainder = divmod(value, divisor)
        if not remainder:
            factors.extend(prime_factor(divisor))
            factors.extend(prime_factor(quotient))
            break
        else:
            factors = [value]
    return factors

if __name__ == '__main__':
    pool = Pool()
    to_factor = [ random.randint(100000, 50000000) for i in range(20)]
    results = pool.map(prime_factor, to_factor)
    for value, factors in zip(to_factor, results):
        print("The factors of {} are {}".format(value, factors))

解决方法

似乎 jupyter 笔记本的问题在不同的 ide 是设计的特点。因此,我们必须将函数(质因数)写入另一个文件并导入模块。此外,我们必须注意调整。例如,在我的例子中,我将函数编码到一个名为defs.py的文件中

def prime_factor(value):
    factors = []
    for divisor in range(2, value-1):
        quotient, remainder = divmod(value, divisor)
        if not remainder:
            factors.extend(prime_factor(divisor))
            factors.extend(prime_factor(quotient))
            break
        else:
            factors = [value]
    return factors

然后我在 jupyter 笔记本上写下了以下几行

import multiprocessing  
import random
from multiprocessing import Pool
import defs



if __name__ == '__main__':
    pool = Pool()
    to_factor = [ random.randint(100000, 50000000) for i in range(20)]
    results = pool.map(defs.prime_factor, to_factor)
    for value, factors in zip(to_factor, results):
        print("The factors of {} are {}".format(value, factors))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jupyter Notebook,内核断通常是由于代码执行时间过长或者代码出现死循环等问题导致的。解决内核断的方法有以下几种: 1. 重新启动内核:在Jupyter Notebook界面的菜单栏选择"Kernel",然后选择"Restart"来重新启动内核。这会清除内核的状态并重新运行代码。 2. 检查代码:内核断通常是由于代码执行时间过长或者出现死循环等问题导致的。可以检查代码是否存在无限循环、大量计算或者需要较长时间才能完成的操作。可以尝试优化代码,减少计算量或者使用更高效的算法。 3. 分块执行:如果代码执行时间过长,可以将代码分成多个块进行执行。这样可以避免一次性执行大量代码导致内核断。可以使用Jupyter Notebook的"Cell"菜单的"Run All Above"或者"Run All Below"来分块执行代码。 4. 增加超时时间:可以通过设置超时时间来避免代码执行时间过长导致的内核断。可以在代码块使用`%timeit`魔术命令来测量代码执行时间,并根据实际情况设置合适的超时时间。 5. 使用并行计算:如果代码需要进行大量计算,可以考虑使用并行计算来加速代码执行。可以使用Python的多线程或者多进程库,如`concurrent.futures`、`multiprocessing`等来实现并行计算。 6. 更新软件包:有时内核断可能是由于软件包版本不兼容或者存在bug导致的。可以尝试更新相关的软件包到最新版本,或者降级到稳定版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值