RuntimeWarning: coroutine was never awaited

Рейтинг: -1Ответов: 1Опубликовано: 03.03.2023

Пытаюсь сделать цикличную отправку сообщений в сообщениях группы ВК с помощью библиотеки Scheduler. Но получаю ошибку

sys:1: RuntimeWarning: coroutine 'write_msg' was never awaited

Как мне использовать asyncio правильно?

Код:

import vk_api
from vk_api.utils import get_random_id

import asyncio
from scheduler.asyncio import Scheduler

import datetime as dt


access_token='token'
vk = vk_api.VkApi(token=access_token)

async def write_msg(user_id, message):
    vk.method('messages.send', {'user_id': user_id, 'message': message, 'random_id': get_random_id()})

async def main():
    loop = asyncio.get_running_loop()
    schedule = Scheduler(loop=loop)

    schedule.cyclic(dt.timedelta(seconds=5), write_msg(used_id, 'Hi'))

    while True:
        await asyncio.sleep(1)

if __name__ == "__main__":
    asyncio.run(main())
    

Ответы

▲ 1Принят

Для того, чтобы использовать asyncio правильно, необходимо добавить оператор await перед вызовом функции write_msg. Также необходимо использовать асинхронную версию метода vk.method.

import vk_api
from vk_api.utils import get_random_id

import asyncio
from scheduler.asyncio import Scheduler

import datetime as dt


access_token='token'
vk = vk_api.VkApi(token=access_token)

async def write_msg(user_id, message):
    await vk.method('messages.send', {'user_id': user_id, 'message': message, 'random_id': get_random_id()})

async def main():
    loop = asyncio.get_running_loop()
    schedule = Scheduler(loop=loop)

    schedule.cyclic(dt.timedelta(seconds=5), await write_msg(used_id, 'Hi'))

    while True:
        await asyncio.sleep(1)

if __name__ == "__main__":
    asyncio.run(main())