Python的多进程编程
使用这些组件。能够方便地编写多进程并发程序。
- from multiprocessing import Process
- import os
- import time
- def sleeper(name, seconds):
- print "Process ID# %s" % (os.getpid())
- print "Parent Process ID# %s" % (os.getppid())
- print "%s will sleep for %s seconds" % (name, seconds)
- time.sleep(seconds)
- if __name__ == "__main__":
- ))
- child_proc.start()
- print "in parent process after child process start"
- print "parent process abount to join child process"
- child_proc.join()
- print "in parent process after child process join"
- print "the parent's parent process: %s" % (os.getppid())
target是新的进程的入口方法,能够觉得是main方法。args是该方法的參数列表。启动进程类似于启动Thread,必需要调用start方法。
也能够继承Process,覆盖run方法,在run方法中实现该进程的逻辑。调用join方法会堵塞当前调用进程。直到被调用进程执行结束。
须要注意的是。exit处理逻辑并不会被运行,该进程的子进程不会被终止,他们仅仅会变成孤儿进程。
put方法用以插入数据到队列中,put方法还有两个可选參数:blocked和timeout。假设blocked为True(默认值),而且timeout为正值,该方法会堵塞timeout指定的时间,直到该队列有剩余的空间。假设超时,会抛出Queue.Full异常。
假设blocked为False,但该Queue已满。会马上抛出Queue.Full异常。
相同,get方法有两个可选參数:blocked和timeout。假设blocked为True(默认值),而且timeout为正值。那么在等待时间内没有取到不论什么元素,会抛出Queue.Empty异常。假设blocked为False,有两种情况存在,假设Queue有一个值可用,则马上返回该值。否则,假设队列为空,则马上抛出Queue.Empty异常。Queue的一段演示样例代码:
- from multiprocessing import Process, Queue
- def offer(queue):
- queue.put("Hello World")
- if __name__ == '__main__':
- q = Queue()
- p = Process(target=offer, args=(q,))
- p.start()
- print q.get()
假设没有消息可接收,recv方法会一直堵塞。假设管道已经被关闭,那么recv方法会抛出EOFError。
- from multiprocessing import Process, Pipe
- def send(conn):
- conn.send("Hello World")
- conn.close()
- if __name__ == '__main__':
- parent_conn, child_conn = Pipe()
- p = Process(target=send, args=(child_conn,))
- p.start()
- print parent_conn.recv()
- from multiprocessing import Process, Lock
- def l(lock, num):
- lock.acquire()
- print "Hello Num: %s" % (num)
- lock.release()
- if __name__ == '__main__':
- lock = Lock()
- ):
- Process(target=l, args=(lock, num)).start()
Python的多进程编程的更多相关文章
- Python多进程编程
转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...
- 【转】Python多进程编程
[转]Python多进程编程 序. multiprocessingpython中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Pytho ...
- python中的多线程和多进程编程
注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并 ...
- Python 多进程编程之 进程间的通信(在Pool中Queue)
Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...
- Python 多进程编程之 进程间的通信(Queue)
Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...
- python 使用多进程实现并发编程/使用queue进行进程间数据交换
import time import os import multiprocessing from multiprocessing import Queue, pool ""&qu ...
- 深入理解python多进程编程
1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...
- python使用multiprocessing进行多进程编程(1)
multiprocessing模块实现了对多进程编程的封装,让我们可以非常方便的使用多进程进行编程.它的使用方法非常类似threading模块. 1.创建一个进程 import multiproces ...
- Python 3 并发编程多进程之进程同步(锁)
Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...
随机推荐
- 洛谷P3620 [APIO/CTSC 2007] 数据备份 [堆,贪心,差分]
题目传送门 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽 ...
- 1、编译安装Nginx
1.1 如何选择web服务器 在实际工作中,我们需要根据业务需求来选择合适的业务服务软件,有关web服务,选择建议如下: 静态业务:若是高并发场景,尽量采用nginx或lighttpd,二者首选ngi ...
- ubuntu14.04下安装爬虫工具scrapy
scrapy是目前准备要学习的爬虫框架,其在ubuntu14.04下的安装过程如下: ubuntu14.04下默认安装了2.7的python以及setuptools,若未安装,可通过下面指令安装: s ...
- UVA 111(LCS问题)
History Grading Background Many problems in Computer Science involve maximizing some measure accor ...
- PHP单例类
单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. 单例类至少拥有以下三种公共元素: 必 ...
- [BZOJ3238][AHOI2013]差异(后缀数组)
求和式的前两项可以直接算,问题是对于每对i,j计算LCP. 一个比较显然的性质是,LCP(i,j)是h[rk[i]+1~rk[j]]中的最小值. 从h的每个元素角度考虑,就是对每个h计算有多少对i,j ...
- 20162312 2016-2017-2《Java程序设计》课程总结
一.每周作业链接汇总 预备作业01 写的是有关老师和学生的关系: 预备作业02 如何做中学: 预备作业03 实验楼学习linux环境: 第一周作业 java入门,虚拟机等课前准备: 第二周作业 掌握J ...
- [转]MySQL与Oracle的语法区别详细对比
Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_c ...
- Ubuntu 16.04下使用VMware安装CentOS 6.9然后在里面再安装KVM之后配置网桥无法上网的问题
别试了,这个问题无法解决,已经使用VMware安装了一层虚拟机,然后在里面再安装KVM,网络层次已经变了,即使配置了网桥同样无法上网. 可是这样试一下,不一定成功:把VMware的虚拟机绑定另一张物理 ...
- NSIS安装包制作
6)闪屏界面,可以在源代码中加入下列代码即可: A.普通效果 以下是代码片段: Function .onInit SetOutPath $TEMP File /oname=spltmp.bmp &qu ...