多进程求素数之和,补充函数

已知下面的程序是计算1~100000之间所有素数和的程序,已实现了单进程计算,但多进程计算暂未实现,请完成use_multi_process()函数的编写,使得整个程序运行正确,并观察开启2个进程和开启4个进程两种方法的时间差异。

img

第一种

def use_multi_process(count):
    pool = multiprocessing.Pool(processes = count)
    index_lst = list(range(1, 100002, 100000 // count))
    index_lst[-1] = 100001
    process_lst = [(index_lst[i], index_lst[i + 1]) for i in range(len(index_lst) - 1)]
    res_lst = [] 
    for i in process_lst:
        res = pool.apply_async(get_prime, (i[0], i[1]))
        res_lst.append(res)
    pool.close()
    pool.join()
    return sum(i.get() for i in res_lst)

img

第二种(需要额外定义get_prime_)

def get_prime_(beg, end, q):
    q.put(get_prime(beg, end))

def use_multi_process(count):
    q = multiprocessing.Queue()
    index_lst = list(range(1, 100002, 100000 // count))
    index_lst[-1] = 100001
    process_lst = [multiprocessing.Process(target = get_prime_, args = (index_lst[i], index_lst[i + 1], q)) for i in range(len(index_lst) - 1)]
    for p in process_lst:
        p.start()
    for p in process_lst:
        p.join()
    return sum(q.get() for _ in range(len(process_lst)))

img

没人回答啊,你能把你现有的代码给贴一下吗?我实在是不想对着图片去抄代码了