python进程教程,python创建进程教学.doc
《python进程教程,python创建进程教学.doc》由会员分享,可在线阅读,更多相关《python进程教程,python创建进程教学.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、进程程序:例如xxx.py这是程序,是一个静态的。进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的。进程的状态工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态。 就绪态:运行的条件都已经满足,正在等在cpu执行。 执行态:cpu正在执行其功能。 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态。创建进程multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以
2、理解为是一个独立的进程,可以执行另外的事情。示例:创建一个进程,执行两个死循环。from multiprocessing import Processimport timedef run_proc(): 子进程要执行的代码 while True: print(-2-) time.sleep(1)if _name_=_main_: p = Process(target=run_proc) p.start() while True: print(-1-) time.sleep(1)说明 创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动方法说明P
3、rocess( target , name , args , kwargs) target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码 args:给target指定的函数传递的参数,以元组的方式传递 kwargs:给target指定的函数传递命名参数 name:给进程设定一个名字,可以不设定Process创建的实例对象的常用方法: start():启动子进程实例(创建子进程) is_alive():判断进程子进程是否还在活着 join(timeout):是否等待子进程执行结束,或等待多少秒 terminate():不管任务是否完成,立即终止子进程Process创建的实例对象的常用
4、属性: name:当前进程的别名,默认为Process-N,N为从1开始递增的整数 pid:当前进程的pid(进程号)示例:from multiprocessing import Processimport osfrom time import sleepdef run_proc(name, age, *kwargs): for i in range(10): print(子进程运行中,name= %s,age=%d ,pid=%d. % (name, age, os.getpid() print(kwargs) sleep(0.2)if _name_=_main_: p = Process(
5、target=run_proc, args=(test,18), kwargs=m:20) p.start() sleep(1) # 1秒中之后,立即结束子进程 p.terminate() p.join()Pool开启过多的进程并不能提高你的效率,反而会降低你的效率,假设有500个任务,同时开启500个进程,这500个进程除了不能一起执行之外(cpu没有那么多核),操作系统调度这500个进程,让他们平均在4个或8个cpu上执行,这会占用很大的空间。如果要启动大量的子进程,可以用进程池的方式批量创建子进程:def task(n): print(-start.format(n) time.slee
6、p(1) print(-end.format(n)if _name_ = _main_: p = Pool(8) # 创建进程池,并指定线程池的个数,默认是CPU的核数 for i in range(1, 11): # p.apply(task, args=(i,) # 同步执行任务,一个一个的执行任务,没有并发效果 p.apply_async(task, args=(i,) # 异步执行任务,可以达到并发效果 p.close() p.join()进程池获取任务的执行结果:def task(n): print(-start.format(n) time.sleep(1) print(-end.
7、format(n) return n * 2if _name_ = _main_: p = Pool(4) for i in range(1, 11): res = p.apply_async(task, args=(i,) # res 是任务的执行结果 print(res.get() # 直接获取结果的弊端是,多任务又变成同步的了 p.close() # p.join() 不需要再join了,因为 res.get()本身就是一个阻塞方法异步获取线程的执行结果:import timefrom multiprocessing.pool import Pooldef task(n): print(
8、-start.format(n) time.sleep(1) print(-end.format(n) return n * 2if _name_ = _main_: p = Pool(4) res_list = for i in range(1, 11): res = p.apply_async(task, args=(i,) res_list.append(res) # 使用列表来保存进程执行结果 for re in res_list: print(re.get() p.close()进程间不能共享全局变量from multiprocessing import Processimport
9、osnums = 11, 22def work1(): 子进程要执行的代码 print(in process1 pid=%d ,nums=%s % (os.getpid(), nums) for i in range(3): nums.append(i) print(in process1 pid=%d ,nums=%s % (os.getpid(), nums)def work2(): 子进程要执行的代码 nums.pop() print(in process2 pid=%d ,nums=%s % (os.getpid(), nums)if _name_ = _main_: p1 = Pro
10、cess(target=work1) p1.start() p1.join() p2 = Process(target=work2) p2.start() print(in process0 pid= ,nums=.format(os.getpid(),nums)运行结果:in process1 pid=2707 ,nums=11, 22in process1 pid=2707 ,nums=11, 22, 0in process1 pid=2707 ,nums=11, 22, 0, 1in process1 pid=2707 ,nums=11, 22, 0, 1, 2in process0 p
11、id=2706 ,nums=11, 22in process2 pid=2708 ,nums=11线程和进程功能 进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ。 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口。定义的不同 进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。区别 一个程序至少有一个进程,一个进程至少有一个线程. 线程的划
12、分尺度小于进程(资源比进程少),使得多线程程序的并发性高。 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率 线线程不能够独立执行,必须依存在进程中 可以将进程理解为工厂中的一条流水线,而其中的线程就是这个流水线上的工人优缺点线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。进程间通信-Queuefrom multiprocessing import Queueq=Queue(3) #初始化一个Queue对象,最多可接收三条put消息q.put(消息1) q.put(消息2)print(q.full() #Falseq.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 进程 教程 创建 教学
限制150内