бутылка + Gevent параллельная поддержка - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение на бутылке python, и я использую сервер gevent run(host=ip, port=8080, server="gevent") с monkey.patch_all().Приложение будет вызывать метод API на удаленном сервере, затем обрабатывать результат и возвращать результат JSON, например {"ret": "success", "code": "0", "message": null, "id": "00001"}.Я использую curl для тестирования приложения, например curl http://10.10.10.10:8080/Check, оно может вернуть успех.Но когда я пытаюсь получить 2 клиентских доступа одновременно, первый доступ возвращает неполный результат JSON, как и {"ret": "success", "code": "0", "message": null, "id", второй может вернуть успех.Как обрабатывать этот параллельный доступ?

В моем приложении он получит некоторый параметр, такой как id, затем, используя эти параметры, создаст класс, когда клиентский доступ одновременно переопределяет значение этих переменных.

1 Ответ

0 голосов
/ 09 октября 2018

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

from gevent import monkey, spawn as gspawn, joinall
monkey.patch_all()
import bottle
from app import appRoute
from client import clientRoute
from main import mainRoute
from api import apiRoute
from sandbox import sandboxRoute
from beaker.middleware import SessionMiddleware
botapp = bottle.app()
for route in (mainRoute, appRoute, clientRoute, apiRoute, sandboxRoute):
    botapp.merge(route)
botapp = SessionMiddleware(botapp, beaker_opts)
port = 80
WSGIServer(("0.0.0.0", int(port)), botapp, handler_class=WebSocketHandler).serve_forever()
...