灵活处理I/O通道。

plib.io的Python项目详细描述


plib.io包和模块

comm 子包为管理和 与子线程和进程通信。这是装运的 作为一个独立的 plib 子包 独立于 io 代码使用。

子包包含实现 其他plib.io构建的通用基本功能。

剩下的大多数子包分为四大类:

  • 设备类型: 插座 串行 。每种设备类型都有 a baseclient baseserver 类;套接字类型 还有一个baserequest类。这些通常不需要 直接使用;它们由I/O模式类使用,并且 分解,以便每个I/O模式都能看到给定的 设备类型。
  • 通道类型 :comm子包包含 实现三种I/O类型的基本功能 通道:客户机、服务器和"持久性"(后者只是 可用于异步I/O模式–见下文)。每个I/O模式 建立在这些基类之上,以实现其特定通道。
  • I/O模式 异步 阻塞 (后者不只是 mean synchronous:它包括一个分叉的tcp套接字服务器)。各 I/O模式对于这两种设备类型都有一个客户机和服务器类,并且 设备类型的请求类:类名是 串行客户端 串行服务器 socketclient socketserver , 以及baserequesthandler。异步类型也有"persistent" 类,支持全双工异步通信;这些 persistentSerial、persistentSocket和 持久请求处理程序 类。这些类的mixin版本 (末尾带有 mixin 的类名)也被提供,以供使用 如果需要备用数据处理(参见下一个项目符号),但是 通常不需要使用这些"手动"-请参阅"自动混音" 下面.
  • 数据处理 :上面给出的I/O模式类包括基本 数据处理,但它是非常基本的:它能检测到的唯一方法 "消息"被完全接收是为了检测一个关闭的 通道。对于某些应用程序,这已经足够了,但通常更多 需要复杂和健壮的数据处理。 数据 子包为此提供了三个mixin类, 关闭读写 终止读写 读写 。 其中第一个通过 关闭数据通道的另一端,但保留通道 打开以允许进一步写入(所有其他类默认为 当另一端关闭时关闭通道)。另外两个 类允许检测数据中的多个"消息" 流,通过检测"终止符"字符串或 每条消息的开头都包含其长度。这些课程 同时以同样的方式格式化传出的消息。

还有一个包含 被其他子包用作mixin,并且a 副包包含使用api的高级类的ge。 最后,还有一个 utils 模块实现了 混音功能描述如下。

自动混音

使用备用数据派生自己的客户机或服务器类 处理"手",您需要使用"mixin"版本的 适当的I/O模式类,并拼接数据处理 将类放入基类列表的中间;例如:

from plib.io.async import SerialClientMixin, SerialBase
from plib.io.data import TerminatorReadWrite

class AsyncSerialClientWithTerminator(SerialClientMixin,
    TerminatorReadWrite, SerialBase): pass

这有点笨拙,但很有必要,因为读/写处理 在mro中的client/server类之前 ,而在 基本设备类型,用于下面的协作调用 正常工作的功能。然而,由于模式是 在每种情况下都是一样的,它可以自动化,这已经在 异步 阻塞 子包命名空间,因此 在"手工"完成上面的类构造时,只需添加一个 为您所需的类名添加后缀,因此:

from plib.io.async import SerialClientWithTerminator

带有结束符的后缀(或者,也可以是带有关机的后缀) 或者 withreadwrite )将导致与上述类等价的 定义动态发生,以便生成的类出现 在 plib.io.async 命名空间中(当然 plib.io.blocking 命名空间具有相同的功能)。 然而,一旦这是第一次发生,类定义 存储在适当的命名空间中,因此 相同的类名(在应用程序的不同模块中)将不会 重新进行"飞行中"的构建;他们将只检索 以前构造的类对象。

上述机器也可根据您自己的习惯使用 读/写处理类;异步和阻塞子包 每个导出函数 如上所述的动态类定义,但是使用您的自定义读/写 类而不是内置的类。你只要通过就行了 函数所需I/O类的名称和自定义 读/写类对象:

from plib.io import async

class CustomReadWrite(object):
    # class definition

MyAsyncSerialClient = async.get_readwrite_class('SerialClient',
    CustomReadWrite)

API注释 :此子包的目标之一是提供 为所有不同类型的I/O提供通用、一致的API,以便 切换特定功能的特定实现 因为另一个可以对应用程序的其余部分透明地执行 代码。因此,所有可用类都遵循相同的基本模式 混合各种功能:从左到右 在类的mro中,可以找到端点的类型(客户端或 服务器mixin类,可专门用于I/O类型)。 数据格式的类型(如果有)(来自 读写 模块),以及I/O的类型,包括设备类型 (插座、串行端口等)、模式(非阻塞/异步vs. 以及基本数据处理。此外,每个端点类型都有 独立于特定类型的I/O和模式的公共API;A 客户机始终可以使用 客户机通信 方法发送 向服务器发送数据并接收响应;服务器始终可以使用 启动自身的 永远服务方法;以及所有I/O对象 重写相同的方法以实现特定于应用程序的 功能: 处理数据 ,处理输入的数据, 以及查询完成,以确定何时应该 关闭。(要查看所有这些操作的示例,请查看测试 测试套件和它的库模块, io_testlib.py ;库模块可以使用相同的 混合类以实现 测试套件中I/O类的不同组合。)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPA。Eclipselink没有为mySQL提供密码,但它应该提供   我的Servlet和@FormDataParam存在java问题   java将什么作为上下文参数传递到文件I/O方法中?   如果两个值相同,java无法找到其中一个单选按钮   java在变量和方法名中使用下划线   JavaSpringMVC单线程安全?   klazz类的java Arraylist(反射Api)   java如何在数字字符串中查找最频繁的数字?   JavaAPI设计:使数据更易于阅读与强制更多API调用   JavaHadoopMapReduceforGoogleWebGraph   java无法启动gauge API:Runner意外退出   java如何在bluemix上使用ibm工作负载调度器?   拉取一年中某一周特定日期的所有日期   java为什么是我的角节点。js应用程序将图像上传到S3� 邮递员正确上传时的符号?   在不使用任何第三方jar的情况下将文件从本地传输到linux系统(java代码)   java将现有文件夹复制到Eclipse工作区中新创建的项目中   Java中的regex RegExp帮助   当使用“系统”外观时,Java组合框setSelectedItem会出现故障   JavaASM:在类的方法中获取局部变量名和值