python编程系列---进程池的优越性体验

摘要:
1.创建子进程1importmultiprocessing,time,os,random234defwork(index):5“”6 task 7:paramindex:task index 8“”9从多处理开始。Process()class_time=time.time()#以毫秒为单位,从1979年1月1日开始计算当前时间,10#random.random():random()-˃xin
1.通过multiprocessing.Process()类创建子进程
 1 import multiprocessing, time, os, random
 2 
 3 
 4 def work(index):
 5     """
 6     任务
 7     :param index:任务索引号
 8     """
 9     start_time = time.time()  # 取当前时间,以毫秒为单位,从1979年一月一号算起
10     # random.random()   :random() -> x in the interval [0, 1)
11     time.sleep(random.random())
12     stop_time = time.time()
13     print("任务%d   执行时间%.2f  当前进程id = %d   当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid()))
14 
15 
16 if __name__ == '__main__':
17     print("main - 当前进程id = %d" % os.getpid())
18     # 创建子进程方式1 通过multiprocessing.Process()类创建
19     for i in range(10):
20         p = multiprocessing.Process(target=work, args=(i,))
21         p.start()

结果如下: 可以看出完成10个任务创建了10个子进程,且这些子进程由主进程创建

python编程系列---进程池的优越性体验第1张

2.使用进程池创建子进程
"""
进程池
1. multiprocessing.Pool()
2. apply_async(func[,args[,kwds]])
  申请异步执行任务
  - func:指向子进程要执行的函数
  - args:向func指向的函数传递可变参数
  - kwargs:向func指向的函数传递关键字参数
3. close() : 关闭进程池, 不再接收新的任务请求
4. terminate() :终止进程池中的子进程的任务执行
5. join(): 阻塞主进程,直到进程池中的所有子进程执行完毕,再解阻塞,必须在close或terminate之后使用;
"""
import multiprocessing, time, os, random


def work(index):
    """
    任务
    :param index:任务索引号
    """
    start_time = time.time()  # 取当前时间,以毫秒为单位,从1979年一月一号算起
    # random.random()   :random() -> x in the interval [0, 1)
    time.sleep(random.random())
    stop_time = time.time()
    print("任务%d   执行时间%.2f  当前进程id = %d   当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid()))


if __name__ == '__main__':
    print("main - 当前进程id = %d" % os.getpid())
    # 创建进程池
    """通过进程池来创建子进程,再执行任务
        processes=3: 设置进程池最大值(拥有进程最大数量)
        缺省值: os.cpu_count() or 1  , 即cpu的数量作为进程池的最大值
        """
    pool = multiprocessing.Pool(3)
    for i in range(10):
        pool.apply_async(func=work, args=(i,))

 

结果如下: 可以看出,完成10个任务,总共还是3个子进程,且这3个子进程也是有主进程创建

python编程系列---进程池的优越性体验第2张

如果你和我有共同爱好,我们可以加个好友一起交流!

 python编程系列---进程池的优越性体验第3张

免责声明:文章转载自《python编程系列---进程池的优越性体验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安装Adobe系列时遇到的问题解决Linux 系统 LVM(Logical Volume Manager)逻辑卷管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python mysql 封装

封装 观察前面的文件发现,除了sql语句及参数不同,其它语句都是一样的 创建MysqlHelper.py文件,定义类 #encoding=utf8 import MySQLdb class MysqlHelper(): def __init__(self,host,port,db,user,passwd,charset='utf8'):...

安装pysqlite2

1. 从https://github.com/msabramo/pysqlite2 下载源码。 2.安装python-dev:sudo apt-get install python-dev否则在 编译或安装过程中,可能会出现 错误:error:Python.h No such file or directory 。注意,不同的Linux发行版的安装命令可...

python GUI界面编程 口算题生成系统

问题描述 口算题生成系统 功能: (1)口算:题目显示在界面上(除法必须是整除),逐个显示题目,用户通过输入框输入计算结果。系统能实时统计正确率,将错误题目打印到文件里。 (2)生成题目:用户选择生成的题目数量,打印时的列数,运算符的数量,将题目生成到docx文件里。 设计说明 (1)拟设计的功能及实现思路、需要用到的知识功能(1)的实现思路: 1.初始化...

python basemap画图去除图片的边边,把图片改为透明色

# 去除图片的边边ax = fig.add_axes([0.1, 0.1, 0.7, 0.7]) ax.axis('off') plt.gca().xaxis.set_major_locator(plt.NullLocator()) plt.gca().yaxis.set_major_loc...

windows10 Anaconda3安装教程

本文主要介绍在 windows 10 系统中安装 Anaconda3 的详细过程。 1. 官网下载安装包 官网下载Anaconda最新安装包: https://www.anaconda.com/distribution/ 根据自己的需要,选择适合自己电脑版本的安装包。我的电脑是win10 64位版本,所以下载下图所示的安装包。   官网下载页面...

python pandas 对带时间序列的数据进行重采样处理

今天老板要处理一批带有时间序列的数据,源数据为1秒钟一行的csv数据,处理之后变成15分钟一行的数据。 源数据示例如下: time B00 B01 ... RollMean2.5RollMean10 2018-05-31 09:44:39 15.212 5.071 .....