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

Как асинхронно запустить методы класса?

Пишу код на telethon, объявил класс так как работать нужно будет с несколькими аккаунтами сразу и запустить его по старинке с помощью gathcher у меня не получилось, поэтому я сделал все функции обычными(без async) и запустил через потоки, что оказалось не тем что мне нужно. Как можно запустить их асинхронно?
from copyreg import pickle
from telethon import TelegramClient
import logging, eel
import telethon
from telethon.tl.functions.channels import JoinChannelRequest
from telethon.tl.functions.messages import ImportChatInviteRequest
from threading import Thread
import asyncio
logging.basicConfig(format='[%(levelname) 5s/%(asctime)s] %(name)s: %(message)s', level=logging.WARNING)

class Client:
    def __init__(self, acc):
        self.name = acc['name']
        self.api = acc['api']
        self.hash = acc['hash']

    async def client(self):

        print(f"{self.name} ----------------------------------------------")
        try:
            self.client = TelegramClient(self.name, self.api, self.hash)
            clientFind = True
        except Exception as err:
            print(f"{self.name} не найден\n{err}")
            clientFind = False

        if clientFind:
            try:
                try:
                    await self.client(ImportChatInviteRequest(Link))
                except telethon.errors.rpcerrorlist.InviteHashExpiredError:
                    await self.client(JoinChannelRequest(Link))
            except Exception as err:
                print(f"Не удалось войти в чат\n{err}")

            while True:
                print(f"{self.name} ----------------------------------------------")
                await asyncio.sleep(1)



async def main():
    accounts = [{'name': 'client1', 'api': 'api1', 'hash': 'hash1'},
                {'name': 'client2', 'api': 'api2', 'hash': 'hash2'}]

    clients = [Client(acc) for acc in accounts]
    for client in clients:
        await asyncio.gather( 
            client.client() # тут вызывается каждый из экземпляров класса
        )
        #client = Thread(target=client.client).start()

# код ниже к вопросу не принадлежит
@eel.expose
def start(links):
    global Link
    Link = links.split(',')
    asyncio.run(main())

eel.init("web")
eel.start("main.html", host='127.0.0.2', port=0, size=(280,250))
  • Вопрос задан
  • 217 просмотров
Подписаться 3 Простой 7 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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