PY多进程——从入门到入院(二)

代码学习来源

from multiprocessing import Pool
import multiprocessing
from  queue import Queue
import time
def test(p):
    time.sleep(0.002)
    return p
if __name__=="__main__":
    pool = Pool(processes=10)
    q=Queue()
    for i  in range(3000):
        q.put(pool.apply_async(test, args=(i,)))#维持执行的进程总数为10,当一个进
    while 1:#第一个while
        if q.get().get()==1000:#因为用的pool的异步,所以返回的并不是怕p,而是pool文件中ApplyResult的一个实例.此时q中还有1999个元素
            pool.terminate() #结束进程池中的所有子进程。
            break
    # pool.close()
    pool.join()
    while not q.empty():#第二个while
        print('the second while',q.get().get())#q里还有元素怎么就停了呢????

我高度怀疑:for循环只是往q队列里放了3000个对象,和给予了子进程工作材料。在这个循环结束后,子进程仍在工作。
在第一个while中,队列中得到1000到进程池停止,实际上子进程还是完成了几个任务。所以在第二个while中,虽然打印了几个1000以后的数字,但之后就停了,因为‘加工’已经停了,没货了(没return值了),所以有如此的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值