2016-12-14 10 views
1

Я относительно новичок в Python и занимаюсь разработкой бота для Discord. Я могу заставить работать бот, но у меня возникают проблемы с несколькими новыми командами, которые я вложил.Задача была уничтожена, но все еще в ожидании! - Ошибка Python Discord Bot

Я создал функцию под названием «Member_City_Count», которая анализирует json с сайта с помощью urllib.requests и сохраняет данные в файле. Я знаю, что работает по себе, однако, когда бот называется, чтобы запустить его я получаю следующее сообщение об ошибке после функции завершения работы и бот выключается:

(Task was destroyed but it is pending! task: 
Task pending coro=<_run_event()running at C:\Users\dom\AppData\Local\Programs\Python\ 
Python35-32\lib\site_packages\discord\client.py:307>wait_for=Future pending 
cb=[Task._wakeup(), BaseSelectorEventLoop._sock_connect_done(964)()]>) 

Что меня смущает больше всего, что около 1 в 4 попытки запустить его будут успешными!

async def on_message(message): 
    if message.content.startswith(!Cities): 
     await client.send_message(message.channel, "Collecting Data ...") 
     Member_City_Count() 
     await client.send_message(message.channel, "Complete") 

Извините, если проблема очевидна, но все же пытается справиться с асинчо.

+0

Я считаю, что это вопрос времени, но я не знаю, почему никто из моих попыток не разрешить его работали. Я считаю, что это связано с тем, что поток keepalive не удалось выполнить ping (из-за долгого обратного вызова где-то). – JamEnergy

ответ

0

Разлад api должен пинговать сервер каждые N секунд (N около 60).

Если этого не произойдет, в какой-то момент вы получите какое-либо исключение (я полагаю, что при следующем вызове discord api).

Если у вас есть длинная работа в любом месте рабочего процесса, это предотвратит пинг и приведет к тому, что ваш клиент войдет в плохое состояние.

Помните, что Python по сути является «одним ядром» во время задач с интенсивным использованием ЦП.

Это связано с asyncio, но это больше связано с конкретным шаблоном использования раздора.

Вы можете разгрузить свою тяжелую блокирующую обработку в другой процесс; иначе разделить его на множество крошечных асинхронных функций.

Вот некоторые смутно связаны информация: https://discordpy.readthedocs.io/en/latest/faq.html#what-does-blocking-mean