Python的进程间通信
进程间通讯有多种方式,包括信号,管道,消息队列,信号量,共享内存,socket等
1.共享内存
Python可以通过mmap模块实现进程之间的共享内存
- mmap.close() 关闭对象
- mmap.find(string[, start[, end]]) 在共享内存中查找内容,返回匹配内容最小的操作标记
- mmap.flush([offset, size]) 把内存的数据保存到硬盘中
- mmap.move(dest, src, count) 移动操作标记
- mmap.read(num) 从操作标记开始读取num个长度的字符
- mmap.read_byte() 读取二进制数据
- mmap.readline() 读取一行数据
- mmap.resize(newsize) 修改mmap的长度
- mmap.rfind(string[, start[, end]]) 在共享内存中查找内容,返回匹配内容最大的操作标记
- mmap.seek(pos[, whence]) 移动操作标记
- mmap.size() 返回mmap对象的长度
- mmap.tell() 返回当前操作标记的位置
- mmap.write(string) 写入内容.
- mmap.write_byte(byte) 写入二进制内容
share_file='/tmp/mm.txt'
f = open(share_file, 'wb')
f.write('a' * share_size)
f.close()
f = open(share_file, 'r+b')
mm = mmap.mmap(f.fileno(), 0)
f.close()
因为mmap对象的长度不能大于文件的长度,不然会报错:ValueError: mmap offset is greater than file siz
所以需要以wb的形式,先打开共享的文件,然后写入需要共享内存的长度的内容,关闭文件后以r+b方式打开文件,然后构造mmap对象。
当然,下次就可以直接用r+b的方式打开文件,然后构造对象了
参考:https://docs.python.org/2/library/mmap.html#module-mmap
2.信号
信号(signal)-- 进程之间通讯的方式。一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。
几个常用信号:
SIGINT 终止进程 中断进程 (control+c)
SIGTERM 终止进程 软件终止信号
SIGKILL 终止进程 杀死进程
SIGALRM 闹钟信号
相对于共享内存,信号更加偏向于系统层面的,linux系统也是通过信号来管理进程,而且系统也规定了某些进程接到某些信号后的行为。
当然我们可以通过绑定信号处理函数来修改进程收到信号以后的行为
#encoding=utf-8
import os
import signal
from time import sleep
def my_term(a,b):
print "收到sigterm信号"
signal.signal(signal.SIGTERM,my_term)
def my_usr1(a,b):
print "收到SIGUSR1信号"
signal.signal(signal.SIGUSR1,my_usr1)
while 1:
print "我是进程id是",os.getpid()
sleep(1)
可以通过os.kill(pid,信号)来主动发送信号
3.通过Queue
__author__ = 'lujianxing'
import threading
from time import sleep def f(q,t):
q.put(t) from multiprocessing import Process,Queue
if __name__ == '__main__':
q=Queue()
p = Process(target=f, args=(q,'ljx.sa'))
p.start()
p.join()
p1 = Process(target=f, args=(q,'ljx.elex'))
p1.start()
p1.join()
print q.qsize()
Python的进程间通信的更多相关文章
- Python、进程间通信、进程池、协程
进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程 ...
- Python 实现进程间通信(网络编程)
[网络编程] 1):网络编程是什么意思,网络编程指的是不同机器之间通过网编相互发信息,我们常用的“QQ”,“微信”,“邮箱” 都个网编编程的应用: 网编编程在技术上还有另一个叫法叫“进程间通信”,进程 ...
- python 不同进程间通信
from multiprocessing import Process,Queue import os def f (qq): qq.put([42,None,'hello']) #将列表传入队列qq ...
- python多进程——进程间通信
(一)进程锁 抢票的例子: # -*- coding:utf-8 -*- from multiprocessing import Process, Lock import time import js ...
- python多进程间通信
这里使用pipe代码如下: import time from multiprocessing import Process import multiprocessing class D: @stati ...
- python进程间通信 实例
python实现进程间通信简单实例 实例讲解了python实现两个程序之间通信的方法,具体方法:该实例采用socket实现,与socket网络编程不一样的是socket.socket(socket.A ...
- python学习笔记(十)——进程间通信
python 在进程间通信时有很多方式,比如使用Queue的消息队列,使用 pip的管道通信,share memory 共享内存或 semaphore 信号量等通信方式. 这里我们演示一下通过消息队列 ...
- Python学习--17 进程和线程
线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 进程 fork调用 通过fork()系统调用,就可以生成一个子进程 ...
- 你见过的最全面的python重点
首先和大家说个对不起,由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西,对于Nginx的东西我没总结在这里,大家可以Python聚焦看,点击直达专栏哦. ...
随机推荐
- 学习笔记之APACHE ANT
http://baike.baidu.com/link?url=KkOWkH_nMVJRbd4oj-aIHMVL4HR-s7fqm3i2brUcZzBinwUXjZgzPcYIWz5qFNNvjait ...
- css动画——transition和animation
http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html 第一部分:CSS Transition 在CSS 3引 ...
- 修改BASH的配色
PS1变量简介 PS1是Linux终端用户的一个环境变量,用来说明命令行提示符的设置. \d :#代表日期,格式为weekday month date,例如:"Mon Aug 1" ...
- Oracle性能调优(AWR)
一.AWR报告 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似.不过AWR在生成报告时,可以选择生成 ...
- iis7 php urlrewrite 并隐藏index.php
<rewrite> <rules> <rule name="OrgPage" stopProcessing="true"> ...
- Java基础环境搭建
- React组件生命周期过程说明【转】
实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidMount 实例化完成后的更新 getI ...
- ASP过滤HTML标签
<% Function RemoveHTML(strHTML) Dim objRegExp, Match, Matches Set objRegExp = New Regexp objRegEx ...
- Sophos UTM WebAdmin存在未明漏洞
...
- Dealloc 在哪个线程执行
1. 引子 在面试过程中曾见过这样一道笔试题,选择你认为对的答案 A.所有对象的dealloc方法会在主线程调用 B.一个对象的dealloc方法会在分配该对象的线程被调用 C.一个对象的deallo ...