#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
или чего-либо еще.