美文网首页Python程序员v大数据 爬虫Python AI Sql我爱编程
在Python 3.5中通过零用户空间内存的套接字进行文件传输

在Python 3.5中通过零用户空间内存的套接字进行文件传输

作者: Python爬虫学习 | 来源:发表于2018-03-27 16:38 被阅读20次

有少数的一些设计选择将Apache Kafka置于快速信息传递系统的前沿。其中之一便是zero copy机制。关于Kafka的原始叙述如下:

一个将本地文件传递到远程套接字的典型方法包括以下步骤:(1)将数据从存储介质中读取到OS的页面缓存中,(2)将缓存数据复制到应用程序缓冲区,(3)复制应用程序缓存区到另一个内核缓冲区(4)将内核缓存区发送到socket。这个过程包括4次复制和2次系统调用。在Linux和Unix的操作系统下,有一个sendfile API可以直接将将文件通道中的字节传输到套接字通道。这可以减少在(2)和(3)之间的两次复制和1次系统调用。

自从python 3.3sendfile系统调用可用作os.sendfile,python 3.5 为基于socket的应用带来了更高级的封装包socket.socket.sendfile。让我们一起来创建一个客户端—服务器文件传输的例子,稍后用sendfile改进它。

在这里还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

客户端不会故意溢出到磁盘上 - 我们想要对其进行基准测试,写入操作将是最费时的。

引入socket.socket.sendfile后可将服务器代码简化为:

让我们一起来看看zero copy有多快。4GB.bin文件是使用以下bash命令监听生成的:

我已经对这两台服务器运行了100次客户端脚本。 执行时间的分配如下所示。

在执行时间方面,socket.socket.sendfile方法速度提高了一倍以上,并且稳定得多。 时间的标准差分别为0.68s和0.03s。

相关文章

  • 在Python 3.5中通过零用户空间内存的套接字进行文件传输

    有少数的一些设计选择将Apache Kafka置于快速信息传递系统的前沿。其中之一便是zero copy机制。关于...

  • 第19天总结网络通信

    socket又叫套接字,实现网络通信的两端就是套接字。分为服务器对应的套接字和客户端对应的套接字 python通过...

  • python网络编程

    socket又叫套接字,实现网络通信的两端就是套接字。分为服务器对应的套接字和客户端对应的套接字。python通过...

  • 一阶段day19-03socket服务器

    socket又叫套接字,实现网络通信的两端就是套接字。分为服务器对应的套接字和客户端对应的套接字。Python通过...

  • socket进程通信

    socket是通过网络来进行进程间通信的。socket也称为“套接字”,是网络通信中的概念,分为流式套接字和用户数...

  • day19

    socket套接字 socket又叫套接字,实现网络通信的python通过提供socket标准库来支持socket...

  • day18网络基础

      socket又叫做套接字,就是进行数据通信两端,分为服务端套接字和客户端套接字。  python对socket...

  • tcp和udp

    【Python网络编程】利用Python进行TCP、UDP套接字编程 http://www.cnblogs.com...

  • 2018-09-12 day -18网络基础(含作业)

    1.socket编程 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字。 python...

  • 当套接字处于监听状态时,Recv-Q表示未被accept的连接数

    我们通过python验证 当套接字处于监听状态时,Recv-Q表示未被accept的连接数当套接字处于监听状态时,...

网友评论

本文标题:在Python 3.5中通过零用户空间内存的套接字进行文件传输

本文链接:https://www.haomeiwen.com/subject/bksscftx.html