Добавить игровой цикл на сервер tornado в python

#python #loops #tornado

#python #циклы #tornado

Вопрос:

У меня есть стандартное tornado приложение python .

Я собираюсь создать игровой сервер с использованием tornado websockets .

Проблема в том, что мне нужен игровой цикл, запущенный на сервере, чтобы что-то делать.

Я мог бы создать веб-обработчик ‘/ startserver’ и добавить следующий код:

 @tornado.web.asynchronous
def get(self):
    if not serverAlreadyStarted:
        serverAlreadyStarted = True
        while True:
            (...)
  

Это кажется очень хакерским, и это означает, что каждый раз, когда я хочу запустить сервер, мне нужно перейти к /startserver

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

Ответ №1:

Вы могли бы просто запустить его в фоновом режиме, например:

 @gen.coroutine
def game_loop():
    while True:
        # Whatever your game loop does.
        print("tick")
        yield gen.sleep(1)

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    loop = tornado.ioloop.IOLoop.current()
    loop.spawn_callback(game_loop)
    loop.start()
  

Комментарии:

1. Я действительно должен был упомянуть, что gunicorn используется для запуска приложения : gunicorn -k tornado myfile:app . У меня нет доступа loop или чего-либо еще.