python多进程相关知识
来源:互联网 发布:win7 64系统优化 编辑:程序博客网 时间:2024/06/03 05:45
- 多线程与多进程概念
多进程即一个进程会产生很多子进程,每个子进程都有自己的 PID,还有自己的内存空间;多线程即一个进程里面包含很多线程,只有一个 PID,每个线程之间内存共享,因为都是在一个进程里,CPU 的一个核会处理一个线程或一个进程。比如一个播放器就是一个多线程的软件,一个线程去处理声音,一个线程去处理画面,这两个线程是同时运行的(并行),这样声音和画面才能同步播放,如果是一个单进程的,那么只能先处理声音,处理完再处理画面(串行),这样就不能同步播放了。 - 多进程模块实例:multiprocessing
threading 模块虽然是一个多线程模块,但不论开多少个线程都只能用一个 CPU 来处理,所以严格意义上来讲不能算是多线程
multiprocessing 模块是一个多进程模块,一个 CPU 处理一个进程,因此我们在写程序的时候尽量使用 multiprocessing 而不是 threading
multiprocessing.cpu_count() :用于统计当前计算机的 CPU 个数
multiprocessing.active_children() :用于列出当前存在的子进程
m = multiprocessing.Process(target=fun, args=()) :用于生成一个进程的执行的对象,接收一个函数和该函数的参数,表示用进程来执行该函数
m.start() :用来开启进程
m.name :用来查看开启的进程的进程名
m.pid :用来查看开启的进程的进程ID
m.is_alive() :用来查看开启的进程是否还在运行
m.run() :用来重写进程
m.join() :用来阻塞进程
lock = multiprocessing.Lock() :生成一个锁对象,锁对象有如下方法
lock.acquire() :获取锁
lock.release() :释放锁
pool = multiprocessing.Pool(processes=n) :使用进程池,括号里面可以指定在进程池中同时开多少个子进程,如 multiprocessing.Pool(processes=2) 表示同时开两个子进程,如果不指定则使用 CPU 的最大核数(比如 CPU 是八核就同时开八个子进程),当有新的请求提交到进程池时,如果池还没有满,那么就会创建一个新的进程用来执行该请求,但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来处理该请求,进程池可以同时处理几百或上千个并行操作,进程池有如下方法
pool.apply_async(func=fun, args=()) :向进程池提交目标请求,接收一个函数和该函数的参数
pool.close() :关闭进程池,会等待进程池中的进程执行完再关闭
pool.terminate() :关闭进程池,直接关闭,不会等待进程池中的进程执行完
pool.join() :阻塞主进程,会等待进程池中的进程执行完毕才阻塞主进程
以多进程的方式打印十个 Hello World :#!/usr/bin/env python#-*- coding:utf8 -*-import multiprocessingdef fun(): print 'Hello World'for i in xrange(10): m = multiprocessing.Process(target=fun, args=()) m.start()
以多进程的方式输出声音和画面:#!/usr/bin/env python#encoding:utf8import timeimport multiprocessingdef fun(name, i): for n in xrange(i): print name, n time.sleep(1)m1 = multiprocessing.Process(target=fun, args=('声音', 3))m2 = multiprocessing.Process(target=fun, args=('画面', 3))m1.start()m2.start()
以进程池的方式输出声音和画面:#!/usr/bin/env python#encoding:utf8import timeimport multiprocessingdef fun(name, i): for n in xrange(i): print name, n time.sleep(1)pool = multiprocessing.Pool(processes=2)pool.apply_async(func=fun, args=('声音', 3)) # 注意这里不是写成 target,而是 funcpool.apply_async(func=fun, args=('画面', 3))pool.close()pool.join() # 注意 pool.close() 之后要运行 pool.join() 阻塞主进程,等待子进程执行完
阅读全文
0 0
- python多进程相关知识
- 多进程的相关知识
- 进程相关知识
- 守护进程相关知识
- 进程的相关知识
- 进程相关知识
- 进程的相关知识
- 进程相关知识
- 进程的相关知识
- Python 脚本相关知识
- python 相关细节知识
- python安装相关知识
- python相关知识总结
- Python 脚本相关知识
- 进程、线程相关知识汇总
- 【Linux】进程相关知识总结
- 进程的相关知识总结
- 进程控制的相关知识
- QQ空间相册访问权限密码破解2018最新方法分享!
- Number of concurrent tasks
- phpstorm各版本激活资源
- 使用npm+babel+webpack+React搭建SharePoint hosted add-in开发环境
- 注册验证(简单,jquery)
- python多进程相关知识
- c语言开发12月第一周
- 数据结构入门——时间复杂度和空间复杂度
- HDU1194 POJ2301 UVA10812 ZOJ2388 Beat the Spread!【数学+水题】
- 如何查询centos查看系统内核版本,系统版本,32位还是64位
- 《七点三刻》030期 “新零售” 争霸/朝鲜希望同美国直接对话…
- 【14-Redis如何处理客户端连接】
- bzoj 5091: 摘苹果 期望+乱搞
- PHP之性能优化