5

Сайт для сервера

Делаю свою онлайн игру на питоне(3.11), с помощью библиотеки pygame(2.5.2). И вот я реализовал клиент, реализовал сервер, но так же потребовалось сделать веб-сайт на фреймворке flask(3.0.2), на котором будут отображаться основные данные о сервере. Обычное(последовательное) программирование отпало сразу. Стал пробовать выполнять задачу через асинхронное программирование, библиотека asyncio, пытался запускать функции через метод "create_task"(обе запускаемы таким образом функции я переделал в асинхронные), однако при запуске программы я получаю следующую ошибку: "RuntimeError: no running event loop; sys:1: RuntimeWarning: coroutine 'main' was never awaited". Ошибку я перевёл, но так и не понял, что она значит. Если здесь есть люди, которые разбираются в подобном, подскажите пожалуйста, как эту ошибку починить? Заранее спасибо за оставленные советы и критику.

P.S. Если понадобится ещё какая-то информация, то вот гитхаб проекта, файл main.py - клиент, server_test.py - сервер.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Вы смотрите срез комментариев. Показать все
10
Автор поста оценил этот комментарий
**Ошибка "no running event loop"** означает, что ваша программа пытается выполнить асинхронную операцию (функцию coroutine), но у нее нет запущенного цикла событий. Цикл событий необходим для выполнения асинхронного кода.

**Как исправить ошибку**

Чтобы исправить ошибку, вам нужно запустить цикл событий в вашей программе. Это можно сделать следующим образом:

```python
if __name__ == "__main__":
# Создаем экземпляр приложения Flask
app = Flask(__name__)

# Запускаем цикл событий Flask
app.run()
```

Здесь `app.run()` запускает встроенный веб-сервер Flask и встроенный цикл событий. Теперь любые асинхронные функции, которые вы запускаете с помощью `create_task`, будут выполняться в этом цикле событий.

**Понимание сообщения об ошибке**

* **RuntimeError: no running event loop** означает, что на момент выполнения асинхронной функции нет запущенного цикла событий.
* **sys:1: RuntimeWarning: coroutine 'main' was never awaited** предупреждает о том, что coroutine `main` (главная функция вашей программы) никогда не была ожидаема. В асинхронном программировании ожидаемые coroutine приостанавливаются и возобновляются циклом событий, поэтому эту ошибку следует устранять.

**Дополнительные советы**

* Не забудьте запустить цикл событий в главной функции программы (часто называемой `main`).
* Используйте `await` для ожидания выполнения асинхронных функций.
* Вы можете использовать `asyncio.run()` как более краткий и простой метод запуска асинхронных функций в основном цикле событий.

Ваш код будет выглядеть примерно так:

```python
if __name__ == "__main__":
from asyncio import run

# Асинхронные функции
async def handle_socket():
pass

async def handle_web_requests():
pass

# Запуск асинхронных функций
run([handle_socket(), handle_web_requests()])

# Запуск веб-сервера Flask
app.run()
```

Теперь ваши асинхронные функции будут выполняться в цикле событий, и ошибка должна быть устранена.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо за ответ, однако при попытке запуска подобной программы запускается только функция отвечающая за саму игру, после закрытия окна сервера flask подал признаки жизни, однако тут же упал с ошибкой "Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)", хотя я использую разные порты. Что можно попробовать сделать ещё?(версию программы, выдающую эту ошибку я запушил на случай надобности).

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку