async def main():
logging.basicConfig(level=logging.INFO)
scheduler_task = asyncio.create_task(scheduler()) # создаём фоновую задачу
try:
await dp.start_polling(bot)
finally:
scheduler_task.cancel() # сигналим о прерывании фоновой задачи
try:
await scheduler_task # даём фоновой задаче шанс обработать сигнал о прерывании
except asyncio.CancelledError:
pass # если всё отработало как надо, то await выкинет CancelledError
def serve_client(client: socket.socket, addr):
... # тут обслуживаешь одно соединение от начала до конца, включая закрытие
def main():
addr = ("0.0.0.0", 10101)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(addr)
server.listen()
try:
while True:
client_sock, client_addr = server.accept() # ждём соединения
Thread(
target=serve_client, # какую функцию запускаем
args=(client_sock, client_addr), # передаём ей параметры
daemon=True, # чтобы по завершению главного потока эти потоки тоже завершились
name=f'Serving_{client_addr}' # имя особо не влияет, но для красоты можно
).start()
finally: # была ошибка, или нас закрыли по Ctrl-C
server.close() # закрываем сокет
... # тут мы можем сделать ещё что-то перед закрытием
if __name__ == '__main__':
main()
-f' causes autossh to drop to the background before running ssh. The -f flag is stripped from arguments passed to ssh. Note that there is a crucial a difference between -f with autossh, and -f with ssh: when used with autossh ssh will be unable to ask for passwords or passphrases. When -f is used, the "starting gate" time (see AUTOSSH_GATETIME) is set to 0.
1. Какой командой собираешь exe? Какие параметры задаёшь?
2. Минимальный пример кода, на котором воспроизводится проблема. Упрощённо, если из бота выкинуть все обработчики и оставить только его запуск - проблема остаётся? Если нет - выкидывай функциональность по частям, пока не найдёшь тот кусок, который это провоцирует.