python网络编程--进程池
一:进程池
进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,
如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。
进程池中有两个方法:
- apply
- apply_async
进程池 apply是串行;apply_async是并行
pool必须先要close在join,进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭
二:代码示例
有join代码和结果
# -*- coding:utf-8 -*-
__author__ = 'shisanjun'
from multiprocessing import Process,Pool
import time
def Foo(i):
time.sleep(2)
return i+100 def Bar(arg):
print("-->exec done",arg) if __name__=="__main__":#main如果有main表示手动运行,执行main下面代码,如果是导入模块就不执行
pool=Pool(5) for i in range(10):
pool.apply_async(func=Foo,args=(i,),callback=Bar)
#Foo执行完的结果会当作参数给Bar
#callback是主进程调用,比如数据库连接,如果在子进程每次都生成连接就会占用资源,在主进程只要生成一次
print("end")
pool.close()
pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭 """
end
-->exec done 100
-->exec done 101
-->exec done 102
-->exec done 103
-->exec done 104
-->exec done 105
-->exec done 106
-->exec done 107
-->exec done 108
-->exec done 109
"""
没有join代码,主进程执行完直接退出了,所以子进行没有结果输出
# -*- coding:utf-8 -*-
__author__ = 'shisanjun'
from multiprocessing import Process,Pool
import time
def Foo(i):
time.sleep(2)
return i+100 def Bar(arg):
print("-->exec done",arg) if __name__=="__main__":#main如果有main表示手动运行,执行main下面代码,如果是导入模块就不执行
pool=Pool(5) for i in range(10):
pool.apply_async(func=Foo,args=(i,),callback=Bar)
#Foo执行完的结果会当作参数给Bar
#callback是主进程调用,比如数据库连接,如果在子进程每次都生成连接就会占用资源,在主进程只要生成一次
print("end")
pool.close()
#pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭

python网络编程--进程池的更多相关文章
- Python并发编程-进程池及异步方式
进程池的基本概念 为什么有进程池的概念 效率问题 每次开启进程,都需要开启属于这个进程的内存空间 寄存器,堆栈 进程过多,操作系统的调度 进程池 python中的 先创建一个属于进程的池子 这个池子指 ...
- python并发编程-进程池线程池-协程-I/O模型-04
目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...
- python 并发编程 进程池与线程池
一 进程池与线程池 1.为什么需要进程池和线程池 基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是: 服务端的程序运行在一台机器身上,一台机器性能是有极限的,不能无限开线程 服务的 ...
- python网络编程-进程锁
一:进程锁的作用 进程锁是防止多进程并发执行在屏幕打印的时候,其他进程也输出数据到屏幕,而出现混乱现象. 比如:进程池中很多进程会向同一个日志文件中打印日志 二:代码 # -*- coding:utf ...
- Python并发编程-进程池的返回值
同步或异步获取返回值 #p = Pool() #p.map(funcname,iterable) 默认异步的执行任务,且自带close,join功能 #p.apply(), 同步调用进程池的方法 #p ...
- python网络编程--进程(方法和通信),锁, 队列,生产者消费者模型
1.进程 正在进行的一个过程或者说一个任务.负责执行任务的是cpu 进程(Process: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在 ...
- python网络编程-进程间数据通信(Queue,Pipe ,managers)
一:进程间数据交换方法 不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用以下方法: Queue,Pipe ,managers 1)Queue,使用方法跟threading里的queue差 ...
- python网络编程--进程线程
一:什么是进程 一个程序执行时的实例被称为一个进程. 每个进程都提供执行程序所需的资源.一个进程有一个虚拟地址空间.可执行代码.对系统对象的开放句柄.一个安全上下文.一个独特的进程标识符.环境变量.一 ...
- Python并发编程-进程池回调函数
回调函数不能传参数 回调函数是在主进程中执行的 from multiprocessing import Pool import os def func1(n): print('in func1', o ...
随机推荐
- Android系统权限和root权限
Android系统权限和root权限http://www.verydemo.com/demo_c189_i277.html
- QNX下进程间通信
https://blog.csdn.net/dh314552189/article/details/87879016 server.cpp #include <stdlib.h> #inc ...
- Activiti工作流的应用示例
1.新建流程模型 模型管理->模型工作区 点击"创建"后会立即跳转到"流程在线设计器"页面,请参考下一节 2.在线流程设计器 模型管理->模型工作区 ...
- Chapter 5(串)
1.kmp #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <str ...
- 经典面试题目C语言
题一,堆和栈的区别是? 题二,Volatile与Register的区别是? 题三,ARM里的大端格式和小端格式分别是什么意思? 题一答案: (1)存储内容不同 栈:在函数调用时,栈中存放的是函数中 ...
- 从新浪JS服务器获得股票和股指深度行情(.NET)
当我们需要通过网络来自动获取股指或股票的深度行情时,一般有以下两种方法可以获得.目前除了使用Python进行爬虫获取(需要解析html获得)外还可以通过新浪提供的JS行情服务器获得,本文采用的是后者( ...
- HOJ 13102 Super Shuttle (圆的反演变换)
HOJ 13102 Super Shuttle 链接:http://49.123.82.55/online/?action=problem&type=show&id=13102 题意: ...
- radio 控制器function用法
delivery_show(); $('.delivery_btn').on('click',function(){ delivery_show(); }); function delivery_sh ...
- Linux运维四:文件属性及文件权限
一:文件属性 我们使用ls -lhi命令来查看文件时,会列出一堆的文件属性,如: [root@Gin day7]# ll -hi total 7.8M 260674 -rw-r--r-- 1 root ...
- NO.7day系统监控,硬盘分区和文件系统管理
系统监控,硬盘分区和文件系统管理 1.系统监控 top命令:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.默认每5秒刷新屏幕数 ...