首页 > 编程语言 > 详细

python:进程池

时间:2018-02-05 19:22:39      阅读:225      评论:0      收藏:0      [点我收藏+]

1,进程可以无限开吗?

进程不可以无限开,cpu有十六核,代表可以同时处理16个任务,如果有160个进程,每个进程

处理需要0.01s,16核的处理器处理160个进程就需要0.5s,因为进程越多需要的时间越多。

2,进程池

import os
import time
import random
from multiprocessing import Pool
from multiprocessing import Process
def func(i):
    i += 1
if __name__ == __main__:
    p = Pool(5)          # 创建了5个进程。一般来说,这里的数值是核数#+1,如果不知道cpu的核数是多少,可以调用os.cpu_count()查看
    start = time.time()
    p.map(func,range(1000))   # target = func  args=next(iterable)  # [(1,2,3),1,2,3,4]
    p.close()   # 是不允许再向进程池中添加任务
    p.join()
    print(time.time() - start)
    start = time.time()
    l = []
    for i in range(1000):
        p = Process(target=func,args=(i,))  # 创建了一百个进程
        p.start()
        l.append(p)
    [i.join() for i in l]
    print(time.time() - start)

3,

import time
from multiprocessing import Pool
# apply

def func(i):
    time.sleep(1)
    i += 1
    # print(i)
    return i+1

if __name__ == __main__:
    p = Pool(5)
    res_l = []
    for i in range(20):
        # p.apply(func,args=(i,))   # apply是同步提交任务的机制
        res = p.apply_async(func,args=(i,))  # apply_async是异步提交任务的机制
        res_l.append(res)
        # print(res.get())   # 阻塞 :等待着任务结果
    p.close() # close必须加在join,不允许再添加新的任务了
    p.join()  # 等待子进程结束再往下执行
    [print(i.get()) for i in res_l]

 

python:进程池

原文:https://www.cnblogs.com/kakawith/p/8419016.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!