Python 进程池
2024-10-19 02:18:17
进程池:
每一个进程在启动一个子进程时都会克隆一分数据,并开启额外一份内存空间,如果多次开启子进程,对内存的开销比较大,这里可以通过进程池来控制进程的最大个数,来解决。
进程池中有两个方法:
- apply #串行
- apply_async #并行
回调callback:
可以启动10台机器批量进行数据库备份,每个进程执行完毕后在数据库内写入一条日志,可以使用回调写入,回调是由主进程执行的,所以只进行一次链接就可以并发帮子进程写入日志,而不需要进行重复的链接。
# windows下的多进程参数
# from multiprocessing import freeze_support
from multiprocessing import Pool
import time,os def Foo(i):
time.sleep(2)
print("in process",os.getpid())
return i+100 def Bar(arg):
print('-->exec done:',arg,os.getpid()) # 判断是直接执行这个脚本,就成立
# 如果是其他文件调用这个脚本就不执行
if __name__ == '__main__': # 允许进程池同时放入吴哥进程
# cpu只会计算这5个,其他进程处于挂起状态
pool = Pool(processes=5) for i in range(10): # 并行执行程序
# callback=回调 执行玩func在回掉callback
# 主进程进行回调
pool.apply_async(func=Foo, args=(i,),callback=Bar) # 串行执行进程
#pool.apply(func=Foo, args=(i,)) print('end') # 关闭pool
pool.close() # 注:并行执行时,先close在join。
# 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。
pool.join()
最新文章
- Linq之旅:Linq入门详解(Linq to Objects)
- php封装微信SDK
- MVVM
- 使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果
- DevExpress BarManager 部分用法
- 用mysqlslap压测mysql
- Bulk Insert 高效快速插入数据
- Keep Mind Working
- H3C虚拟化之IRF
- MinerHtmlThread.java 爬取页面线程
- 触发器中的after与before理解
- tableView中cell的复用机制
- 常用.bat
- shell升级
- Intersection(Check)
- sharepoint 2013工具
- flex 的总结
- vue基础知识之vue-resource/axios
- Oracle 触发器(一)
- django自定义模板和过滤器