python进程间通信

1 python提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信

1.1 Queue有两个方法:

  • Put方法:以插入数据到队列中,他还有两个可选参数:blocked和timeout。详情自行百度
  • Get方法:从队列读取并且删除一个元素。同样,他还有两个可选参数:blocked和timeout。详情自行百度
#!coding:utf-8
from multiprocessing import Process, Queue
import os,time,random

#写数据进程执行的代码
def proc_write(q,urls):
    print ‘Process is write....‘
    for url in urls:
        q.put(url)
        print ‘put %s to queue... ‘ %url
        time.sleep(random.random())

#读数据进程的代码
def proc_read(q):
    print(‘Process is reading...‘)
    while True:
        url = q.get(True)
        print(‘Get %s from queue‘ %url)

if __name__ == ‘__main__‘:
    #父进程创建Queue,并传给各个子进程
    q = Queue()
    proc_write1 = Process(target=proc_write,args=(q,[‘url_1‘,‘url_2‘,‘url_3‘]))
    proc_write2 = Process(target=proc_write,args=(q,[‘url_4‘,‘url_5‘,‘url_6‘]))
    proc_reader = Process(target=proc_read,args=(q,))
    #启动子进程,写入
    proc_write1.start()
    proc_write2.start()

    proc_reader.start()
    #等待proc_write1结束
    proc_write1.join()
    proc_write2.join()
    #proc_raader进程是死循环,强制结束
    proc_reader.terminate()
  • 运行截图:

1.2 Pipe通信机制,

* Pipe常用于两个进程,两个进程分别位于管道的两端

* Pipe方法返回(conn1,conn2)代表一个管道的两个端,Pipe方法有duplex参数,默认为True,即全双工模式,若为FALSE,conn1只负责接收信息,conn2负责发送,

* send和recv方法分别为发送和接收信息。

#!coding:utf-8
import multiprocessing
import os,time,random

#写数据进程执行的代码
def proc_send(pipe,urls):
    #print ‘Process is write....‘
    for url in urls:

        print ‘Process is send :%s‘ %url
        pipe.send(url)
        time.sleep(random.random())

#读数据进程的代码
def proc_recv(pipe):
    while True:
        print(‘Process rev:%s‘ %pipe.recv())
        time.sleep(random.random())

if __name__ == ‘__main__‘:
    #父进程创建pipe,并传给各个子进程
    pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=proc_send,args=(pipe[0],[‘url_‘+str(i) for i in range(10) ]))
    p2 = multiprocessing.Process(target=proc_recv,args=(pipe[1],))
    #启动子进程,写入
    p1.start()
    p2.start()

    p1.join()
    p2.terminate()
  • 运行结果;

原文地址:https://www.cnblogs.com/guguobao/p/9398653.html

时间: 2024-08-05 09:24:07

python进程间通信的相关文章

python 进程间通信

Python进程.进程池以及进程间通信 进程间通信的几种方式 python进程间通信:Queue pipe 原文地址:https://www.cnblogs.com/charlieLeo/p/9544145.html

资深程序员:深入Python进程间通信原理!

输出 3.14159262176 管道pipe 管道是Unix进程间通信最常用的方法之一,它通过在父子进程之间开通读写通道来进行双工交流.我们通过os.read()和os.write()来对文件描述符进行读写操作,使用os.close()关闭描述符. 上图为单进程的管道 上图为父子进程分离后的管道 输出 3.14159262176 无名套接字socketpair 我们知道跨网络通信免不了要通过套接字进行通信,但是本例的多进程是在同一个机器上,用不着跨网络,使用普通套接字进行通信有点浪费. 上图为

Python进程间通信之匿名管道

匿名管道 管道是一个单向通道,有点类似共享内存缓存.管道有两端,包括输入端和输出端.对于一个进程的而言,它只能看到管道一端,即要么是输入端要么是输出端. os.pipe()返回2个文件描述符(r, w),表示可读的和可写的.示例代码如下: #!/usr/bin/python import time import os def child(wpipe): print('hello from child', os.getpid()) while True: msg = 'how are you\n'

python 进程 进程池 进程间通信

1.python 中创建进程的两种方式: from multiprocessing import Process import time def test_(): print '-----test-----' if __name__ == '__main__': p = Process(target=test_) p.start() while True: print '--main--' '''1.通过process 类创建一个进程对象,然后start即可开启进程, test test_函数是

学习笔记_廖雪峰<Python 2.7 教程>

进程和线程的基础知识 CPU执行代码是顺序执行, 单核CPU通过让任务交替执行, "模拟"除了多任务并发执行. 真正的多任务并发, 是在多核CPU上, 每个CPU负责执行一个任务. 但实际任务数量远多于CPU核心数量, 所以最终还是操作系统把多任务轮流调度到不同的核心上执行. 进程/线程和物理内存(寄存器)/CPU的关联: 函数调用, 会在栈中分配一块空间, 存放局部变量和参数, 调用结束, 栈空间被释放. 每个线程都有独立的栈, 寄存器. 同一进程里的所有线程共享文件, 代码和数据.

Python并发目录

Python并发目录 Python网络编程-IO阻塞与非阻塞及多路复用 Python进程-理论 Python进程-实现 Python进程间通信 注意点 python编程中的if __name__ == 'main与windows中使用多进程 综合运用实例 Python Socket请求网站获取数据  未完待续…… 原文地址:https://www.cnblogs.com/xiao-apple36/p/8684874.html

消息队列和 RabbitMQ

消息队列和 RabbitMQ 消息队列 来看这样一个例子.相信大家都用外卖软件点过外卖.当我们在手机上下单之后,都发生了什么呢? 首先,客户用手机下单,将请求发送给服务端.服务端当然要先安排订单系统确认我们的订单信息,只有当我们付款成功后,订单才会生成.订单生成后,需要做三件事(真实的系统要做的事情更多,这里只是简单讨论):分配骑士.告知商家和记录流水. 如果按照流程顺序,一步一步走,执行同步操作.我们假设订单系统要花费 500 ms,其他系统都要花费 300 ms.那么整套系统应该要花费 1.

Python的进程间通信

进程间通讯有多种方式,包括信号,管道,消息队列,信号量,共享内存,socket等 1.共享内存 Python可以通过mmap模块实现进程之间的共享内存 mmap文件对象既像一个字符串也像一个普通文件对象.像字符串时因为我们可以改变其中的单个字符,如,obj[index] = 'a',同时我们也可以改变一小段的字符,如 obj[2:5]='aaa'.像文件对象是因为在mmap中会有操作标记,我们可以使用seek()方法来改变mmap对象的操作标记 mmap对象通过mmap()方法来构建,Windo

Python开发基础--- 进程间通信、进程池、协程

进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程queue的生成是用multiprocessing模块生成的. 在生成子进程的时候,会将代码拷贝到子进程中执行一遍,及子进程拥有和主进程内容一样的不同的名称空间. 示例1: 1 import multiprocessing 2 def foo(): 3 q.put([11,'hello',True]