Задать вопрос
@kratorr

Как остановить работу корутины?

Добрый день, пишу клиентское приложение, для общения с несколькими устройствами. Взяв пример из документации к asyncio накидал клиент, всё отлично работает с несколькими десятками устройств, но не могу понять как прекратить работу клиентов, после получения нужного сообщения. Вот пример кода:
spoiler
import asyncio


class ClientProtocol(asyncio.Protocol):
    def __init__(self, loop):
        self.loop = loop
        
    def connection_made(self, transport):
        self.transport = transport
     
    def data_received(self, data):
        _process_command(self.data)
		
    def _process_command(self, data):
        if "connection" in data:
            self.foo(data)
        elif "exit" in data:
            self.bar()
 
    def foo(self, data):
        pass
		
    def bar(self):
        pass
		
if __name__ ==  "__main__":
    loop = asyncio.get_event_loop()
    coros = [
        loop.create_connection(lambda: ClientProtocol(loop), '10.10.10.1', 666),
        loop.create_connection(lambda: ClientProtocol(loop), '10.10.10.2', 666),
        loop.create_connection(lambda: ClientProtocol(loop), '10.10.10.3', 666)
    ]
    loop.run_until_complete(asyncio.gather(*coros))
    loop.run_forever()
    loop.close()


Обработчик при наличии "exit" запускает функцию bar() и в ней каким то образом надо остановить работу этого подключения, спустя какое то время от всех клиентов придёт команда "exit" и код должен завершить свою работу. Подскажите пожалуйста как быть в данной ситуации.
  • Вопрос задан
  • 358 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
self.transport.close()
Ответ написан
и еще посмотрите на этот пример из документации
думаю Вам нужно еще реализовать connection_lost
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы