惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
博客园 - Franky
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
D
Docker
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
H
Help Net Security
B
Blog
宝玉的分享
宝玉的分享

老董笔记

尚硅谷机构在哪?尚硅谷培训怎么样?靠谱吗-互联网IT百科 韩顺平介绍,传智讲师,开办泰牛,入尚硅谷等一系列-互联网IT百科 pandas多重索引标准样式(写入excel有空行)-互联网IT百科 cannot join with no overlapping index names-互联网IT百科 pandas多列变多行(即宽表变长表)melt和stack函数-互联网IT百科 pandas多行转多列(长表变宽表)pivot和unstack-互联网IT百科 Index contains duplicate entries, cannot reshape完美解决-互联网IT百科 single positional indexer is out-of-bounds-互联网IT百科 Can only compare identically-labeled Series objects-互联网IT百科 pandas transform用法详解(多个案例)-互联网IT百科 python四舍五入精确实现-互联网IT百科 pandas的groupby使用apply分组排序-互联网IT百科 index 0 is out of bounds for axis 0 with size 0-互联网IT百科 pandas分组过滤filter函数-互联网IT百科 联想Win10系统如何禁用触摸屏关闭触摸-互联网IT百科 groupby分组计算transform转换返回相同长度序列-互联网IT百科 brooks seo教程python教程,brooks seo教程网盘,布鲁seo资源-互联网IT百科 电脑右键文件夹一直转圈电卡死怎么回事-互联网IT百科 施琪嘉的心理成长课(荐)-互联网IT百科 百度SEO公司_SEO推广公司哪家好_SEO外包服务如何选-老董笔记 groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数-互联网IT百科 pandas的groupby单列多列分组聚合运算-互联网IT百科 DataFrameGroupBy对象及分组个数、分组大小、组名索引、组数据详解-互联网IT百科 pandas中groupby之Grouper and axis must be same length-互联网IT百科 pandas中groupby的分组原理-互联网IT百科 pandas的groupby的使用详解大全-互联网IT百科 openpyxl单元格自动换行强制换行Alignment(wrapText=True)-互联网IT百科 python教程全套(可就业)-互联网IT百科 联想win10系统CPU显示100%,电脑呼呼响怎么回事-互联网IT百科 如何自制CPU,CPU原理是怎么样的?-互联网IT百科
通过进程池Pool的方式创建进程-互联网IT百科
2019-06-06 · via 老董笔记

  前面我们创建进程都是直接利用multiprocessing中的Process动态成生多个进程,但如果需要成百上千个进程手动的去创建就不科学了,此时就可以用到multiprocessing模块提供的Pool方法。它的特点如下:

  1)初始化Pool时,可以指定一个最大进程数;

  2)有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;

  3)但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来执行。

  4)进程池实现了上下文管理协议,程序可以使用 with 子句来管理进程池,这样就可以避免程序主动关闭进程池。

  请看下面的实例:

# ‐*‐ coding: utf‐8 ‐*‐

from multiprocessing import Pool
import os,time,random


def worker(msg):
    t_start = time.time()
    print("(%s)开始执行,进程号为%d"%(msg,os.getpid()))
    time.sleep(random.randint(1,2))
    t_stop = time.time()
    print("(%s)执行完毕,耗时%d秒"% (msg,t_stop-t_start))


if __name__ == "__main__":

    p = Pool(3)  # 定义一个进程池,最大进程数3
    for i in ['小王','中王','老王']:
        # Pool.apply_async(要调用的目标,(传递给目标的参数元祖,))
        p.apply_async(worker,(i,))
    p.close()  # 关闭进程池,关闭后p不再接收新的请求
    p.join()  # 等待p中所有子进程执行完成,必须放在close语句之后

D:installpython3python.exe D:/pyscript/test/test2.py
(小王)开始执行,进程号为6640
(中王)开始执行,进程号为2080
(老王)开始执行,进程号为1100
(小王)执行完毕,耗时1秒
(中王)执行完毕,耗时1秒
(老王)执行完毕,耗时1秒

Process finished with exit code 0


  multiprocessing.Pool常用函数解析:

  apply_async(func[,args[,kwds]]):使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表;

  apply(func[,args[,kwds]]):使用阻塞方式调用func,该方法会被阻塞直到func函数执行完成。

  close():关闭Pool,使其不再接受新的任务,它会把当前进程池中的所有任务执行完成后再关闭自己。

  terminate():不管任务是否完成,立即终止进程池;

  join():主进程阻塞,等待子进程的完成,必须在close或terminate之后使用;

# ‐*‐ coding: utf‐8 ‐*‐

from multiprocessing import Pool
import os,time,random


def worker(msg):
    t_start = time.time()
    print("(%s)开始执行,进程号为%d"%(msg,os.getpid()))
    time.sleep(random.randint(1,2))
    t_stop = time.time()
    print("(%s)执行完毕,耗时%d秒"% (msg,t_stop-t_start))


if __name__ == "__main__":

    p = Pool(3)  # 定义一个进程池,最大进程数3
    for i in ['小王','中王','老王']:
        # Pool.apply 阻塞的方式
        p.apply(worker,(i,))
    p.close()  # 关闭进程池,关闭后p不再接收新的请求
    p.join()  # 等待p中所有子进程执行完成,必须放在close语句之后

D:installpython3python.exe D:/pyscript/test/test2.py
(小王)开始执行,进程号为10480
(小王)执行完毕,耗时1秒
(中王)开始执行,进程号为9812
(中王)执行完毕,耗时2秒
(老王)开始执行,进程号为9564
(老王)执行完毕,耗时2秒

Process finished with exit code 0


  multiprocessing.Pool其他函数解析:

  map(func,iterable[,chunksize]):类似于Python的map()全局函数,只不过此处使用新进程对iterable的每一个元素执行func函数。

  map_async(func,iterable[,chunksize[,callback[,error_callback]]]):这是map()方法的异步版本,该方法不会被阻塞。其中callback指定func函数完成后的回调函数,error_callback指定func函数出错后的回调函数。

  imap(func,iterable[,chunksize]):这是map()方法的延迟版本。

  imap_unordered(func,iterable[,chunksize]):功能类似于imap()方法,但该方法不能保证所生成的结果(包含多个元素)与原iterable中的元素顺序一致。

  starmap(func,iterable[,chunksize]):功能类似于map()方法,但该方法要求iterable的元素也是iterable对象,程序会将每一个元素解包之后作为func函数的参数。

# ‐*‐ coding: utf‐8 ‐*‐

from multiprocessing import Pool
import os,time,random


def worker(msg):
    t_start = time.time()
    print("(%s)开始执行,进程号为%d"%(msg,os.getpid()))
    time.sleep(random.randint(1,2))
    t_stop = time.time()
    print("(%s)执行完毕,耗时%d秒"% (msg,t_stop-t_start))


if __name__ == "__main__":

    p = Pool(3)  # 定义一个进程池,最大进程数3
    for i in ['小王','中王','老王']:
        # Pool.apply 阻塞的方式
        p.apply(worker,(i,))
    p.close()  # 关闭进程池,关闭后po不再接收新的请求
    p.join()  # 等待p中所有子进程执行完成,必须放在close语句之后

D:installpython3python.exe D:/pyscript/test/test2.py
(小王)开始执行,进程号为10480
(小王)执行完毕,耗时1秒
(中王)开始执行,进程号为9812
(中王)执行完毕,耗时2秒
(老王)开始执行,进程号为9564
(老王)执行完毕,耗时2秒

Process finished with exit code 0

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会