惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
G
Google Developers Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
雷峰网
雷峰网
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
B
Blog
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

老董笔记

尚硅谷机构在哪?尚硅谷培训怎么样?靠谱吗-互联网IT百科 韩顺平介绍,传智讲师,开办泰牛,入尚硅谷等一系列-互联网IT百科 pandas多重索引标准样式(写入excel有空行)-互联网IT百科 cannot join with no overlapping index names-互联网IT百科 pandas多列变多行(即宽表变长表)melt和stack函数-互联网IT百科 pandas多行转多列(长表变宽表)pivot和unstack-互联网IT百科 Index contains duplicate entries, cannot reshape完美解决-互联网IT百科 single positional indexer is out-of-bounds-互联网IT百科 Can only compare identically-labeled Series objects-互联网IT百科 pandas transform用法详解(多个案例)-互联网IT百科 python四舍五入精确实现-互联网IT百科 pandas的groupby使用apply分组排序-互联网IT百科 index 0 is out of bounds for axis 0 with size 0-互联网IT百科 pandas分组过滤filter函数-互联网IT百科 联想Win10系统如何禁用触摸屏关闭触摸-互联网IT百科 groupby分组计算transform转换返回相同长度序列-互联网IT百科 brooks seo教程python教程,brooks seo教程网盘,布鲁seo资源-互联网IT百科 电脑右键文件夹一直转圈电卡死怎么回事-互联网IT百科 施琪嘉的心理成长课(荐)-互联网IT百科 百度SEO公司_SEO推广公司哪家好_SEO外包服务如何选-老董笔记 groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数-互联网IT百科 pandas的groupby单列多列分组聚合运算-互联网IT百科 DataFrameGroupBy对象及分组个数、分组大小、组名索引、组数据详解-互联网IT百科 pandas中groupby之Grouper and axis must be same length-互联网IT百科 pandas中groupby的分组原理-互联网IT百科 pandas的groupby的使用详解大全-互联网IT百科 openpyxl单元格自动换行强制换行Alignment(wrapText=True)-互联网IT百科 python教程全套(可就业)-互联网IT百科 联想win10系统CPU显示100%,电脑呼呼响怎么回事-互联网IT百科 如何自制CPU,CPU原理是怎么样的?-互联网IT百科
进程间的通信Pipe管道-互联网IT百科
2019-06-06 · via 老董笔记

  管道的本质是在内存中开辟一个新的空间,对多个进程可见,在通信形式上形成一种约束,管道在信息传输上是以流的方式传输,先进先出原则。

  需要程序调用 multiprocessing.Pipe(duplex) 来创建一个管道。该函数会返回两个 PipeConnection 对象,代表管道的两个连接端(一个管道有两个连接端,分别用于连接通信的两个进程)。

  1) 如果duplex为True(默认),则管道是双向的(即每个端同时可以收发信息)

  2) 如果duplex是False,那么管道是单向的:conn1只能用于接收消息,conn2只能用于发送消息。

  3) 默认情况下是双工(双向,即一端可以发消息同时可以收消息)

  PipeConnection 对象包含如下常用方法:

  send(obj):发送一个 obj 给管道的另一端,另一端使用 recv() 方法接收。需要说明的是,该 obj 必须是可 picklable 的(Python 的序列化机制),如果该对象序列化之后超过 32MB,则很可能会引发 ValueError 异常。

  recv():接收另一端通过 send() 方法发送过来的数据。

  fileno():关于连接所使用的文件描述器。

  close():关闭连接。

  poll([timeout]):返回连接中是否还有数据可以读取。

  send_bytes(buffer[, offset[, size]]):发送字节数据。如果没有指定 offset、size 参数,则默认发送 buffer 字节串的全部数据;如果指定了 offset 和 size 参数,则只发送 buffer 字节串中从 offset 开始、长度为 size 的字节数据。通过该方法发送的数据,应该使用 recv_bytes() 或 recv_bytes_into 方法接收。

  recv_bytes([maxlength]):接收通过 send_bytes() 方法发迭的数据,maxlength 指定最多接收的字节数。该方法返回接收到的字节数据。

  recv_bytes_into(buffer[, offset]):功能与 recv_bytes() 方法类似,只是该方法将接收到的数据放在 buffer 中。

  注意点:

  如果两个进程(或线程)尝试同时读取或写入管道的同一端,管道中的数据可能会损坏,在实现生产者消费者模型中需要加锁。其实管道加锁就是队列的实现!

# ‐*‐ coding: utf‐8 ‐*‐

import multiprocessing
from multiprocessing import Process, Pipe


def proc1(pipe):

    pipe.send("proc1")
    print("进程proc1({0})收到".format(multiprocessing.current_process()),pipe.recv())

def proc2(pipe):

    print("进程proc2({0})收到".format(multiprocessing.current_process()),pipe.recv())
    pipe.send("proc2")


if __name__ == '__main__':

    # 创建一个管道 这个管道是双向的
    pipe = Pipe()

    # pipe[0] 表示管道的一端,pipe[1] 表示管道的另外一端
    p1 = Process(target=proc1,args=(pipe[0],))
    p2 = Process(target=proc2,args=(pipe[1],))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
D:installpython3python.exe D:/pyscript/test/test1.py
进程proc2(<Process(Process-2, started)>)收到 proc1
进程proc1(<Process(Process-1, started)>)收到 proc2

Process finished with exit code 0

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会