python 进程池_python进程池

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。

初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务,请看下面的实例:

import multiprocessing

import time

import os

import random

def test1(msg):

t_start=time.time()

print("%s开始执行,进程号为%d" %(msg, os.getpid()))

time.sleep(1)

t_stop=time.time()

print("%s执行完成,耗时%.2f" % (msg, t_stop -t_start))if __name__ == "__main__":

po= multiprocessing.Pool(3)for i in range(0, 10):

# Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))

# 每次循环将会用空闲出来的子进程去调用目标

po.apply_async(test1, (i,))

print("-----start-----")

po.close() # 关闭进程池,关闭后po不再接收新的请求

po.join() # 等待po中所有子进程执行完成,必须放在close语句之后

print("-----end-----")

outputs

macname@MacdeMacBook-Pro py %python3 cccccc.py-----start-----0开始执行,进程号为54293

1开始执行,进程号为54294

2开始执行,进程号为54295

0执行完成,耗时1.001执行完成,耗时1.002执行完成,耗时1.003开始执行,进程号为54295

4开始执行,进程号为54294

5开始执行,进程号为54293

3执行完成,耗时1.006开始执行,进程号为54295

5执行完成,耗时1.004执行完成,耗时1.007开始执行,进程号为54293

8开始执行,进程号为54294

8执行完成,耗时1.006执行完成,耗时1.007执行完成,耗时1.009开始执行,进程号为54293

9执行完成,耗时1.00

-----end-----macname@MacdeMacBook-Pro py %

multiprocessing.Pool常用函数解析:

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

close():关闭Pool,使其不再接受新的任务;

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

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

进程池中的Queue#

如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到一条如下的错误信息:

RuntimeError: Queue objects should only be shared between processes through inheritance.

下面的实例演示了进程池中的进程如何通信import osimport multiprocessing

import time

def write(q):

print("write启动(%s),父进程为(%s)" %(os.getpid(), os.getppid()))for i in "python":

q.put(i)

def read(q):

print("read启动(%s),父进程为(%s)" %(os.getpid(), os.getppid()))for i inrange(q.qsize()):

print("read从Queue获取到消息:%s" % q.get(True))if __name__ == "__main__":

print("(%s) start" %os.getpid())

q=multiprocessing.Manager().Queue()

po=multiprocessing.Pool()

po.apply_async(write, args=(q,))

time.sleep(2)

po.apply_async(read, args=(q,))

po.close()

po.join()

print("(%s) end" % os.getpid())

outputs

macname@MacdeMacBook-Pro py %python3 cccccc.py

(54303) start

write启动(54305),父进程为(54303)

read启动(54306),父进程为(54303)

read从Queue获取到消息:p

read从Queue获取到消息:y

read从Queue获取到消息:t

read从Queue获取到消息:h

read从Queue获取到消息:o

read从Queue获取到消息:n

(54303) end

macname@MacdeMacBook-Pro py %

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【gRPC】 在.Net core中使用gRPC

最近在学习.net core的微服务体系架构。微服务之间的通信常常通过gRPC进行同步通信,但是需要注意的是,大多数微服务之间的通信是通过事件总线进行异步通信。在微软介绍.net微服务体系架构的项目eShop中,微服务之间进行同步通信的场景很多&…

disconf mysql_Docker搭建disconf环境,三部曲之三:细说搭建过程

Docker下的disconf实战全文链接细说搭建过程在前两章中,我们利用远程或本地的镜像,快速体验了本地启动disconf的过程,本章我们一起来分析和梳理整个定制和搭建过程,了解这些后,我们就能根据自己的需要来定制本地的disc…

AgileConfig-如何使用AgileConfig.Client读取配置

前面的文章都是介绍AgileConfig服务端已经控制台是如何工作、如何使用的,其实AgileConfig还有一个重要的组成部分:AgileConfig.Client。AgileConfig.Client是使用C#编写的一个类库,只有使用它才能跟AgileConfig的服务端配合工作实现实时推送配…

mysql导入数据提前修改字段_Mysql一些导入导出数据库,添加修改字段命令_MySQL...

bitsCN.comMysql 导出数据库表包含数据命令:mysqldump -uroot -proot abc >/var/abc.sql;(mysql用户名:root 密码root 数据库:abc 导出到:/var/abc.sql)Mysql 导出数据库表不包含数据命令:mysqldump -uroot -proot …

轻量级 Kubernetes K3s - Github热点

轻量级 Kubernetes k3sstar: 15.5kK3s是完全符合生产要求的Kubernetes发行版, 安装简单,可用于生产,整个二进制文件小于100M,作为单一文件打包部署,优势在于,你只需几秒钟就可以得到一个完全成熟的Kubernetes集群。htt…

java 固定长度队列_如何彻底搞懂 Java 数据结构?|CSDN 博文精选

作者 | 张振华.Jack责编 | 郭芮出品 | CSDN 博客本文和大家一起来重温《Java数据结构》经典之作。Java数据结构要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构…

IdentityServer4 之 Resource Owner Password Credentials 其实有点尴尬

前言接着IdentityServer4的授权模式继续聊,这篇来说说 Resource Owner Password Credentials授权模式,这种模式在实际应用场景中使用的并不多,只怪其太开放啦,直接在客户端上拿着用户名和密码就去授权服务器获取AccessToken&#…

存储过程mysql报错1271_mysqldump备份失败以及解决方法汇总

mysqldump备份失败以及解决方法汇总〇 mysqldump: Error: Query execution was interrupted, maximum statement execution time exceeded when trying to dump tablespaces〇 mysqldump: Error 3024: Query execution was interrupted, maximum statement execution time exce…

Xamarin使XRPC实现接口/委托远程调用

在之前的文章中已经介绍如何使用Beetlex.XRCP组件进行接口/委托远程调用;由于组件BeetleX.XRPC.Clients支持.NETStandard2,因此Xamarin同样可以使用它来实现基于接口/委托的数据交互通讯。接下来通过Xamarin实现一个简单的移动程序,并通过XRP…

mysql 拷贝安装_Mysql的安装和主从复制

安装mysql服务步骤一:首先下载mysql的yum源配置 ,下载mysql的yum源wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm步骤二:安装mysql的yum源yum -y install mysql57-community-release-el7-11.noarch.rpm步骤三&…

浅谈CLR基础知识

中午的时候,有一个小伙伴问我,CLR到底是进程还是线程,它和自己写的程序是怎么关联的。这一问,直接把我问懞了。下面我尝试用简单的语言来描述这个问题,有的地方无法讲的太细(不然内容会太多)&am…

mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程

MySQL不能启动和停止 MySQL各种解决方法教程本文章总结了种MySQL无法启动、无法停止解决办法,包括在windows系统,linux系统中mysql不能启动与停止的解决办法,有需了解的朋友可进入参考。解决无法启动A、先使用命令C:/Program files/mysql/bin/mysqladmin…

NHibernate中的SchemaExport

昨天,在看hibernate文档的时候,看到了这样一段: You should now create this table in your database manually, and later read Chapter 15, Toolset Guide if youwant to automate this step with the SchemaExport tool. This tool can …

Asp.Net Core使用Skywalking实现分布式链路追踪

介绍Skywalking 是 Apache 基金会下面的一个开源 APM 项目,是一套(APM)分布式追踪系统,提供了很多数据存储列如:Mysql,H2,Elasticsearch7 等。其中APM 全称是应用性能监测软件,主要是用来处理以及追踪分布式…

python 里什么时候缩进_python什么时候缩进

Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c有很大的不同(传统的c/c使用花括号花括号{}符决定作用域的范围;python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。每行代码中开头的空格数(whitespace)用于…

Hey, everybody!

今天有一位MVP朋友问我是否想做MVP,我想了半天,还是觉得有机会就要尝试,失败了也没什么大不了的。所以最后决定要参加这么一次活动,虽然是自不量力,也要搏一搏啦!如果说大家都能够来推荐我一下多好啊&#…

C# 9 新特性 —— 补充篇

C# 9 新特性 —— 补充篇Intro前面我们分别介绍了一些 C# 9 中的新特性,还有一些我觉得需要了解一下的新特性,写一篇作为补充。Top-Level Statements在以往的代码里,一个应用程序必须要有 Main 方法才能运行,从 C# 9 开始&#xf…

使用Popup窗口创建无限级Web页菜单(5)

代码框架在(4)里面已经全部列出来了,现在工作就是按流程把他们完成。本来实现一个prototype的Menu菜单类只需要最多300行代码,可是后来做了一些操作习惯支持和UI显示上的优化后,代码猛增到了1000多行。不过final版本看起来确实比土不拉叽的pr…

【gRPC】ProtoBuf 语言快速学习指南

继上篇【gRPC】 在.Net core中使用gRPC了解了gRPC的使用,gRPC基于HTTP/2和ProtoBuf,ProtoBuf就非常有必要好好了解一下了,那么ProtoBuf究竟是什么?ProtoBuf Google Protocol Buffer是一种语言无关、平台无关、可扩展的序列化结构数…

vspythonqt混合_PYQT5 vscode联合操作qtdesigner的方法

除了使用pycharm外,还可使用vscode来操作pyqt,方法如下:1. 在vscode中配置相关的pyqt的相关根据自己实际情况修改第一项pyqt的路径2. 创建一个文件夹,右键,最后一项可以创建一个新窗口创建的新窗口后缀为 .ui右键中有以…