• Как остановить asyncio server.serve_forever() из другого потока?

    @igudo Автор вопроса
    Смог решить проблему.

    Закрывать сервер надо асинхронно:
    class Server:
    
        .........
        
        async def close(self):
            async with self.server:
                self.server.close()
            await self.server.wait_closed()


    Соответственно переписать signal_handler, чтобы вызывал асинхронную функцию закрытия сервера:
    def signal_handler(signal, frame):
        asyncio.run(server.close())
        sys.exit(0)


    Так сервер перестает работать. Но при этом, нужно демонизировать поток, чтобы он закрывался вместе с основным (это кстати странно немного для меня, раньше вроде и без этого всё закрывалось, видимо что-то на низком уровне, разобраться надо):
    server = Server()
    thread = Thread(target=server.run_serve)
    thread.daemon = True
    thread.start()
    thread.join()  # после старта всех потоков
  • Как остановить asyncio server.serve_forever() из другого потока?

    @igudo Автор вопроса
    Спасибо за ответ. По поводу флажка - понимаю, только вот основной цикл сервера спрятан внутри self.server.serve_forever(), так что я как-то не особо понимаю, как это можно сделать (неужели придется на более низкий уровень переходить с asyncio?). Соединения все получается закрыть флажками, но сам сервер не останавливается.

    По поводу потоков - их не так много. Суть в том, чтобы открыть пару серверов на разных портах и распределенно принимать клиентов. А асинхронность, соответственно, чтобы не было блокировки при принятии соединения и отсылки/получения данных.

    Про ThreadPoolExecutor не слышал, посмотрю
  • Как отключить авторизацию в админке django?

    @igudo Автор вопроса
    Надо переопределить admin login view


    Допустим я её найду и переопределю, но в каком файле это делать? И как сделать, чтобы джанго брала именно мою, переопределенную, вьюху?