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. 列表生成式,在第二篇博客里面我写了 ...
随机推荐
- Log4Net的WinForm使用
一.Log4Net的WinForm使用 1.首先使用nuget 添加log4Net 到WinForm项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L - %m%n log4j.pr ...
- DRF视图集的使用
# 原创,转载请留言联系 如果要把同一种http请求方法的多个接口放在同一个视图中,比如:查询多条数据和一条数据都是get请求,放在同一个视图里,应该怎么做呢??? 如果直接放在一起,会怎样呢? # ...
- k8s的DamonSet使用
Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. 1.Daemo ...
- MATLAB的cftool工具箱简介
下面,通过一个例子说明cftool可视化界面工具箱的用法. 例如,已知 x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0]; y = ...
- 开放API端口SIGN算法详细设计
开放API端口SIGN算法详细设计 前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要 ...
- 自动监控tomcat脚本并且执行重启操作
#!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # author:reed # date:// # 定义环境变量 MYPATH=/usr/local/jdk/bin exp ...
- CSS3实现鼠标经过图片时图片放大
在鼠标经过图片时,图片被放大,而且还有个过渡的效果.... <!DOCTYPE html> <html> <head> <link href="cs ...
- CSS 从入门到放弃系列:CSS的选择器和优先级
CSS的选择器和优先级 CSS的N种选择器 !important 其实这个玩意不算什么选择器,放在这只是为了突出这个选择器优先级或者说权重的从高到低而已.. 内联方式(行间样式) <div st ...
- WordPress插件扫描工具plecost
WordPress插件扫描工具plecost WordPress是PHP语言开发的博客平台.该平台允许用户通过插件方式扩展博客功能.由于部分插件存在漏洞,给整个网站带来安全风险.Kali Linu ...
- Servlet规范简介
引言 Web 框架一般是通过一个 Servlet 提供统一的请求入口,将指定的资源映射到这个 servlet, 在这个 servlet 中进行框架的初始化配置,访问 Web 页面中的数据,进行逻辑处理 ...