我正在尝试使用asyncio将Python代码中基于回调的同步流转换为a同步流。
基本上,代码与TCP/UNIX套接字交互很多。它从套接字读取数据,操纵它做出决策,并将数据写回另一端。这是在多个套接字上同时进行的,并且数据在上下文之间共享,以便有时做出决策。在
EDIT::当前的代码主要基于注册一个回调到一个特定套接字的中心实体,并在相关套接字可读时让该实体运行回调(类似于“当该套接字有数据要读取时调用此函数”)。一旦回调被调用,就会发生一系列的事情,最终在新数据可用时注册一个新的回调。中心实体对所有注册的套接字运行select,以确定应该调用哪些回调。在
我试图做到这一点,而不是重构我的整个代码,并使它尽可能无缝的程序员-所以我试着这样想-所有的代码都应该像今天一样运行-但是每当当前代码做接收插座()以获取新数据-该进程将执行其他任务。当read返回时,它应该返回到使用它获得的新数据处理来自同一点的数据。在
为此,我编写了一个名为AsyncSocket的新类,它与asyncIO的IO流交互,并将Async/await语句几乎完全放在其中—我认为我将在类中实现recv方法,使其在我的代码中看起来像“常规IO套接字”。
到目前为止,这是我对A-sync编程应该允许什么的理解。在
现在是问题:
我的代码等待客户机连接-当它连接时,允许每个客户机的上下文从它自己的连接读写。
为了澄清问题,我简化为以下流程:class AsyncSocket():
def __init__(self,reader,writer):
self.reader = reader
self.writer