码迷,mamicode.com
首页 > 编程语言 > 详细

python:进程池

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

标签:random   ret   ble   iter   target   append   机制   async   from   

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:进程池

标签:random   ret   ble   iter   target   append   机制   async   from   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!