问题描述
我基本上在使用多处理模块,我还在学习多处理的功能.我正在使用 Dusty Phillips 的书,这段代码属于它.
I am using multiprocessing module basically, I am still learning the capabilities of multiprocessing. I am using the book by Dusty Phillips and this code belongs to it.
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))
在 Windows PowerShell(不是 jupyter notebook)上,我看到以下内容
On the Windows PowerShell (not on jupyter notebook) I see the following
Process SpawnPoolWorker-5:
Process SpawnPoolWorker-1:
AttributeError: Can't get attribute 'prime_factor' on <module '__main__' (built-in)>
我不知道为什么单元格永远不会结束运行?
I do not know why the cell never ends running?
推荐答案
看来Jupyter notebook 和不同ide 的问题是设计特性.因此,我们必须将函数(prime_factor)写入不同的文件并导入模块.此外,我们必须注意调整.例如,就我而言,我已将函数编码到名为 defs.py 的文件中
It seems that the problem in Jupyter notebook as in different ide is the design feature. Therefore, we have to write the function (prime_factor) into a different file and import the module. Furthermore, we have to take care of the adjustments. For example, in my case, I have coded the function into a file known as 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 notebook 中我写了以下几行
Then in the jupyter notebook I wrote the following lines
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))
这解决了我的问题
这篇关于Jupyter notebook 永远不会使用多处理(Python 3)完成处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!