Задать вопрос
@CleRleQ
Учусь программированию, люблю игры.

При запуске нескольких аккаунтов pyrogram одновременно через threading: RuntimeError: There is no current event loop in thread 'Thread-2 (runner)'.?

Привет всем, Нужно запустить сразу несколько юзерботов в одно время. При использовании threading появляется такая ошибка:
spoiler
Exception in thread Thread-1 (runner):
Traceback (most recent call last):
File "C:\Users\Atomniy-PC\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner
self.run()
File "C:\Users\Atomniy-PC\AppData\Local\Programs\Python\Python310\lib\threading.py", line 946, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Atomniy-PC\Desktop\projects\TgUserBot\main.py", line 20, in runner
c.run()
File "C:\Users\Atomniy-PC\Desktop\projects\TgUserBot\env\lib\site-packages\pyrogram\methods\utilities\run.py", line 73, in run
loop = asyncio.get_event_loop()
File "C:\Users\Atomniy-PC\AppData\Local\Programs\Python\Python310\lib\asyncio\events.py", line 656, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'Thread-1 (runner)'.
Exception in thread Thread-2 (runner):
Traceback (most recent call last):
File "C:\Users\Atomniy-PC\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner
self.run()
File "C:\Users\Atomniy-PC\AppData\Local\Programs\Python\Python310\lib\threading.py", line 946, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Atomniy-PC\Desktop\projects\TgUserBot\main.py", line 20, in runner
c.run()
File "C:\Users\Atomniy-PC\Desktop\projects\TgUserBot\env\lib\site-packages\pyrogram\methods\utilities\run.py", line 73, in run
loop = asyncio.get_event_loop()
File "C:\Users\Atomniy-PC\AppData\Local\Programs\Python\Python310\lib\asyncio\events.py", line 656, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'Thread-2 (runner)'.

Process finished
with exit code 0

Я так понимаю, это происходит по той причине, что функция запускается не в основном потоке, но как это исправить не могу понять..
import...
accounts = [app, app2]

async def echo(client, message):

    await message.reply(message.text)


def runner(c):
    c.run()


for ac in accounts:
    ac.add_handler(handlers.MessageHandler(echo, filters.text & filters.private))
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    t = threading.Thread(target=runner, args=(ac,))
    t.start()
    t.join()
  • Вопрос задан
  • 245 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Jack444
Забудь про треды, в современном питоне, потоки существуют чисто для прикола, на производительность это не как не влияет, пока 1 поток выполняется все остальные будут заблокированы, когда-то давно от тредов был смысл, сейчас все тежи задачи выполняет asyncio и в одном потоке.
Если действительно нужно рапаралелить код или запустить несколько процессов то используй мультипроцессинг и сделай евент луп внутри каждого процесса.
Ещё учти что каждый процес отдельный порт должен занять если c.run() поднимает сервер.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
AST Москва
До 350 000 ₽
Wanted. Москва
До 250 000 ₽
14 янв. 2025, в 00:52
100 руб./за проект
14 янв. 2025, в 00:45
7000 руб./за проект
14 янв. 2025, в 00:39
30000 руб./за проект