这是我的质因数分解程序,我在pool.apply_async(findK,args =(N,begin,end))
中添加了回调函数,当分解结束时,会弹出消息提示prime factorization is over
,它正常工作。
import math
import multiprocessing
def findK(N,begin,end):
for k in range(begin,end):
if N% k == 0:
print(N,"=" ,k ,"*", N/k)
return True
return False
def prompt(result):
if result:
print("prime factorization is over")
def mainFun(N,process_num):
pool = multiprocessing.Pool(process_num)
for i in range(process_num):
if i ==0 :
begin =2
else:
begin = int(math.sqrt(N)/process_num*i)+1
end = int(math.sqrt(N)/process_num*(i+1))
pool.apply_async(findK, args=(N,begin,end) , callback = prompt)
pool.close()
pool.join()
if __name__ == "__main__":
N = 684568031001583853
process_num = 16
mainFun(N,process_num)
现在我想在apply_async中更改回调函数,将提示更改为关闭函数以杀死所有其他进程。
def prompt(result):
if result:
pool.terminate()
提示作用域中未定义池实例或未传入提示功能。
pool.terminate()
无法在提示函数中运行。
如何将 multiprocessing.Pool 实例传递给 apply_async 的回调函数?
(我已将其制作成类格式,只需添加一个类方法并调用 self.pool.terminate 即可杀死所有其他进程,
如何在函数格式中完成工作?)
如果没有将池设为全局变量,则可以将池传递到回调函数中吗?