Python学习笔记(四)多进程的使用
python中多进程与Linux 下的C基本相同。
fork的基本使用
先看最简单的例子:
# coding: utf-8
import os def my_fork():
pid = os.fork()
if pid == 0:
print 'this is child, pid = %d, parent id = %d' % (os.getpid(), os.getppid())
elif pid > 0:
print 'this is parent, pid = %d, child id = %d' % (os.getpid(), pid)
os.waitpid(pid, 0) #等待子进程结束 if __name__ == '__main__':
my_fork()
这个例子演示了fork的基本使用,还有就是我们最后使用了waitpid来回收子进程。
如果不知道具体的子进程号码,可以使用wait函数。
管道pipe的使用
代码如下:
# coding: utf-8
import os
from time import sleep def my_fork():
r, w = os.pipe()
pid = os.fork()
if pid == 0:
os.close(r) #关闭读端
w = os.fdopen(w, "w")
for i in range(10):
w.write('%s\n' % (str(i+1))) #最后加上\n
w.flush() #这里记得刷新
sleep(0.5)
w.close()
elif pid > 0:
os.close(w) #关闭写端
r = os.fdopen(r, "r")
while True:
data = r.readline() #不要使用read
if not data:
print 'close.'
break;
print 'received : %s' % (data)
os.waitpid(pid, 0) #等待子进程结束 if __name__ == '__main__':
my_fork()
在子进程中,连续10次发送数字。
这里有几点值得注意:
write时加上\n符号
接收时使用readline函数
每发送完一个数据,就刷新flush一次缓冲区
使用信号处理僵尸进程
Python中也可以使用信号处理函数,例如最简单的中断信号:
# coding: utf-8
import os
import signal
from time import sleep def handler(a, b):
print 'Ctrl + C' if __name__ == '__main__':
signal.signal(signal.SIGINT, handler)
while True:
pass
每按一次Ctrl+C,就触发一次这个函数。
代码如下:
# coding: utf-8
import os
import signal
from time import sleep def handler(a, b):
(pid, status) = os.wait()
print 'Child %d Finish, status = %d' % (pid, status) def my_fork():
pid = os.fork()
if pid == 0:
print 'this is child, pid = %d, parent id = %d' % (os.getpid(), os.getppid())
elif pid > 0:
print 'this is parent, pid = %d, child id = %d' % (os.getpid(), pid) while True:
pass if __name__ == '__main__':
signal.signal(signal.SIGCHLD, handler)
my_fork()
每当有子进程消亡,就触发SIGCHLD信号,然后在处理函数中调用wait函数。这里比Linux下简单,不必使用while循环回收。
下节使用python,编写一个多进程的并发服务器。
完。
Python学习笔记(四)多进程的使用的更多相关文章
- Python学习笔记(四)Python函数的参数
Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...
- Python学习笔记四
一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...
- Python学习笔记四:面向对象编程
一:定义类并创建实例 Python中定义类,通过class关键字,类名开头大写,参数列表为所继承的父类.如果没有需要明确继承的类,则继承object. 使用类来创建对象,只需 类名+() 形式即可,p ...
- python学习笔记——multiprocessing 多进程组件-队列Queue
1 消息队列 1.1 基本语法 消息队列:multiprocessing.Queue,Queue是对进程安全的队列,可以使用Queue实现对进程之间的数据传输:还有一个重要作用是作为缓存使用. Que ...
- python学习笔记——multiprocessing 多进程组件 Pipe管道
进程间通信(IPC InterProcess Communication)是值在不同进程间传播或交换信息. IPC通过有管道(无名管道 和 有名 / 命名管道).消息队列.共享存储 / 内容.信号量. ...
- python学习笔记——multiprocessing 多进程组件 进程池Pool
1 进程池Pool基本概述 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量时间,如果操作的对象数目不大时,还可以直接适用Process类动态生成 ...
- python学习笔记——multiprocessing 多进程模块Process
系统自带的fork模块创建的多进程是基于Linux或Unix平台的,而window平台并不支持: python中的multiprocess为跨平台版本的多进程模块,支持子进程.通信和共享数据.执行不同 ...
- python学习笔记(四) 思考和准备
一.zip的坑 zip()函数接收多个可迭代数列,将数列中的元素重新组合,在3.0中返回迭代器指向 数列首地址,在3.0以下版本返回List类型的列表数列.我用的是3.5版本python, 所以zip ...
- python学习笔记(四):函数
一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasc ...
- python学习笔记(四):生成器、内置函数、json
一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...
随机推荐
- [设计模式-行为型]访问者模式(Vistor)
一句话 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 概括
- cobbler部署安装
挂载光驱 # mount /dev/cdrom /mnt/ 安装cobbler所需软件 # yum install cobbler cobbler-web dhcp tftp-server pykic ...
- git add 文档
GIT-ADD(1) Git Manual GIT-ADD(1) NAME git-add - Add file contents to the index SYNOPSIS git add [-n] ...
- hdu5072
补集转化,求不符合条件的三元组数目 但是怎么统计呢,这里我没想到 [如果三个数a, b, c不符合条件,那么一定有一对是互质的,有一对是不互质的.不妨令a, b互质,b, c不互质.于是我们可以枚举b ...
- 浅谈C#多线程与UI响应
www.educity.cn 发布者:shenywww 来源:网络转载 发布日期:2014年10月06日 ...
- Django remedy a security issue refer dos attack
Today the Django team is issuing multiple releases -- Django 1.4.8, Django 1.5.4, and Django 1.6 bet ...
- C#异步编程模式IAsyncResult
IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 B ...
- C++线段树模板(区间和、区间加)
操作说明: segtree<T>tree(len) =>创建一个内部元素类型为T.区间为1-len的线段树tree tree.build(l,r) =>以[l,r]区间建立线段 ...
- 洛谷 - Sdchr 的邀请赛 T4 信息传递
(乱搞艹爆正解系列) 对不起,由于博主太弱了,并不会正解的多项式exp(甚至多项式exp我都不会2333). 只能来说一说我是怎么乱搞的啦QWQ 首先这个题最关键的性质是: 一个在原置换 g 中长度为 ...
- [xsy2300]好题
题意:有一棵树,每个节点有颜色,要找出最小的连通块使得其中的点至少有$k$种不同的颜色,只需输出这个最小连通块的大小 因为$k$很小,所以如果颜色只有$k$种,我们可以直接状压DP,设$f_{i,j} ...