python 进程通信

最近看了本有关linux的书,提到了posix ipc 这种进程通信技术,想来,python一定有合适的库来做这件事情,百度一番,果不其然,有一个名叫poxis_ipc的库,随手写了几个小的示例,分享给大家,参考资料地址 http://semanchuk.com/philip/posix_ipc/


        1、Shared memory

      共享内存需要用到内存文件映射,关于这项技术,之前的博客有过介绍,不再赘述,看代码:

         

#coding=utf-8
import os 
import mmap
import time
import posix_ipc
size = os.statvfs('.')[1]
mem = posix_ipc.SharedMemory('/foo', posix_ipc.O_CREAT,size=size)
f = mmap.mmap(mem.fd, size)
i = 0
while i<20:
    seconds = int(time.time())
    
    f[:10] = (str(seconds))
    time.sleep(2)
    i += 1
f.close()
mem.close_fd()
mem.unlink()

      代码很容易读懂,需要解释的一点是,内存文件映射要求映射的大小是内存页大小的整数倍,如果你分配的不是整数倍,那么最后一块所在的内存页仍然是会被完成的映射进来。

      这段程序每隔两秒钟向映射的内存中写入当前的秒数,一共写20次,然后退出。为了演示效果,我们还需要另一个程序来读取数值

     

#coding=utf-8
import os 
import mmap
import time
import posix_ipc

size = os.statvfs('.')[1]

mem = posix_ipc.SharedMemory('/foo', posix_ipc.O_CREAT,size=size)
f = mmap.mmap(mem.fd,size,access=mmap.ACCESS_WRITE)
while True:
    print f[:10]
    time.sleep(3)
       同时运行这两个脚本,先后顺序不用关心,一个写,一个读,便完成了进程间信息的交换


       2、Message Queues

        使用message queues,一个进程可以直接向另一个进程发送消息
        先上接收端的代码
       
#coding=utf-8
import posix_ipc
import time
mq = posix_ipc.MessageQueue('/kwsy', posix_ipc.O_CREAT)
print mq.name
#mq.send('foo')
#time.sleep(3)
while True:
    print mq.receive()
        我这里使用的是阻塞的方法

        再看发送端代码
   
#coding=utf-8
import posix_ipc
import time
mq = posix_ipc.MessageQueue('/kwsy', posix_ipc.O_CREAT)
mq.send('foo',priority=9)

         一次运行只发送一个消息,消息的优先级是9
        如果有一个进程接收消息,有两个进程发送消息,会是什么情况呢,什么都不用担心,这个时候两个进程发送的消息都会发送到接收进程中。如果是一个进程发送,两个进程同时接收,那么两个进程几乎是平分这些消息。

            3、 Semaphore

       关于信号量,如果你会多线程,那么你多少对信号量有所了解。这里有两个重要方法,一个是acquire,一个是release,前者在信号量大于0时触发,并将信号量减1,而后者负责对信号量加1

       
#coding=utf-8
import posix_ipc
import time

sem = posix_ipc.Semaphore('/sp', posix_ipc.O_CREAT,initial_value=0)

sem.acquire()

print 'ok'
#sem.close()
sem.unlink()

        信号量初始为0,程序会一直阻塞在sem.acquire这一行,直到有一个进程执行release改变信号量使得信号量的值大于0为止
    
#coding=utf-8
import posix_ipc
sem = posix_ipc.Semaphore('/sp', posix_ipc.O_CREAT)
sem.release()

       工作中几乎没有用到过进程通信,对这种技术的理解也不深入,写几个简单的实例,将来如果用到了,可以快速入手。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值