Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Discord.py и процесс в фоне. Многопоточность.

• _ Ученик (97), открыт 5 дней назад
Приветствую. Есть бот на discord.py. Есть также бесконечно выполняющаяся функция, которая периодически взаимодействует с ботом (отправляет в чат сообщения). Как сделать так, чтобы основной процесс не блокировался, тщетно ожидая завершения функции?

 import discord 

def my_funct():
while True:
print("*")

@client.event
async def on_interaction(inter):
pass

@client.event
async def on_ready():
try:
my_funct() # непрерывная функция
print("Бот запущен") # <— до сюда, разумеется, выполнение не доходит
except Exception as e:
print(e)

client.run(token="BLABLA", reconnect=True)
1 ответ
dake Prosto Ученик (167) 5 дней назад
 import asyncio 
import discord

async def my_background_task():
while True:
print("*")
await asyncio.sleep(60) # Замените 60 на нужный вам интервал в секундах

@client.event
async def on_ready():
try:
client.loop.create_task(my_background_task())
print("Бот запущен")
except Exception as e:
print(e)

client.run(token="BLABLA", reconnect=True)
async def my_background_task(): - Это асинхронная функция, которая выполняет вашу бесконечную задачу. Она использует await asyncio.sleep(60) для ожидания 60 секунд между итерациями.

client.loop.create_task(my_background_task()) - Создает задачу (task) в асинхронном цикле Discord.py. Это позволяет выполнению my_background_task() продолжаться в фоновом режиме, не блокируя основной поток выполнения.

print("Бот запущен") - Этот код будет достигнут после того, как задача my_background_task() будет успешно запущена в фоновом режиме.
Похожие вопросы