Использование синхронной библиотеки с асинхронным Discord.py
Я работаю над ботом, который передает сообщения из Steem Blockchain (используя синхронную библиотеку beem) и отправляет сообщения, которые соответствуют определенным критериям, на канал Discord (используя асинхронную библиотеку Discord.py). Это мой (упрощенный) код:
bot = commands.Bot(command_prefix="!")
async def send_discord(msg):
await bot.wait_until_ready()
await bot.send_message(bot.get_channel("mychannelid"), msg)
async def scan_post(post):
"""Scan queued Comment objects for defined patterns"""
post.refresh()
if post["author"] == "myusername":
await loop.create_task(send_discord("New post found"))
async def start_blockchain():
stream = map(blockchain.stream(opNames=["comment"]))
for post in stream:
await loop.create_task(scan_post(post))
if __name__ == '__main__':
while True:
loop.create_task(start_blockchain())
try:
loop.run_until_complete(bot.start(TOKEN))
except Exception as error:
bot.logout()
logger.warning("Bot restarting "+repr(error))
Прежде чем я реализовал discord.py, я бы просто вызвал синхронную функцию scan_post(post)
и это работало просто отлично, но теперь с асинхронной реализацией сообщения обрабатываются недостаточно быстро, и поток имеет быстро увеличивающуюся задержку. Если я сделаю scan_post(post)
синхронная функция, время обработки в порядке, но веб-розетка Discord закрывается (или даже не открывается), и бот отключается. Как я могу решить это простым способом (без переписывания библиотеки beem)?