У меня есть сервер, который также взаимодействует с самим собой, поскольку он был клиентом (он создает соединение с самим собой с помощью asyncio.open_connection (), имеющего программу записи и чтения asyncio).Протокол связи - JSON-RPC.
Как только размер буфера asyncio writer превысит верхний порог, и я ожидаю истощения, в программе Python3.5 с несколькими сопрограммами она, кажется, навсегда зависает.Размер буфера никогда не меняется, даже если цикл обработки событий имеет шанс передать управление любой сопрограмме, которая может очистить буфер пишущего устройства.У меня возникли проблемы с утечкой, которые не являются сопрограммированными, и я прочитал о них, я использую asyncio.lock вокруг него, но я не думаю, что это вызывает взаимоблокировку, потому что команда внутри блокировки не должна зависеть от этой строки в другихсопрограммы.
with await self._drain_lock:
await self.writer.drain()
Мне кажется, что внутренний буфер уменьшается только в методе _write_ready () _UnixWritePipeTransport (unix_events.py), _SelectorSslTransport и _SelectorSocketTransport (selector_events),Они добавляются как обратные вызовы в конце write (), если буфер пуст.Когда эти обратные вызовы должны быть выполнены?
Возможно ли, что он заблокирован, потому что, когда сервер связывается с самим собой, опустошение буфера зависит от показаний?