Вам не нужно использовать потоки, когда вы работаете с asyncio
, и вам также не нужно использовать client.run_until_disconnected()
. Все, что нужно, это поддерживать событие l oop работающим, пока клиент не будет отключен. Пока вы запускаете событие l oop, Telethon будет работать нормально.
# Create client
client = ...
# Do whatever with the client
@client.on(...)
async def handler(event):
...
async def main():
while True:
# Do whatever (check if now is time to send messages, for example)
...
# Yielding control back to the event loop here (with `await`) is key.
# We're giving an entire second to it to do anything it needs like
# handling updates, performing I/O, etc.
await asyncio.sleep(1)
client.loop.run_until_complete(main())
Другие способы сохранить событие l oop в рабочем состоянии - использовать loop.run_forever
, и не забывайте, что вы можете asyncio.create_task
или подождать многих из них ... Я рекомендую вам прочитать asyncio
документы. Как и threading
, документацию стоит изучить, чтобы узнать, как ее использовать.
В качестве примечания, если вам действительно нужны потоки (например, вы ' Вы выполняете интенсивную работу с ЦП), asyncio
также прикрывает спину. Но на самом деле ничего из этого не определено c для Telethon.
Если вы хотите лучше понять, как работает asyncio
(возможно, это поможет вам), см. Введение в Asyncio
Само собой разумеется, есть лучшие способы проверить, когда пришло время отправлять сообщения (используя кучу и события, спать до следующего времени или другого максимума, а не только одну секунду), но это должно получить Вы начали.