Поддерживает ли Spyne (python платформа веб-сервисов) несколько потоков? Если нет, есть ли способ использовать библиотеку потоков Python? - PullRequest
1 голос
/ 11 июля 2020

Из-за возможности взаимодействия мне нужно развернуть приложение как веб-службу. Для этого я использую Spyne (http://spyne.io/), фреймворк python для ws. Пока все хорошо.

Однако сервис получит сразу несколько запросов. Следовательно, мне нужно повысить производительность, поскольку запрос выполняет несколько задач ввода-вывода (база данных, файл).

Следующий пример кода ie базовая c веб-служба в Spyne. Исходя из этого, поддерживает ли Spyne пул потоков или потоки? Как я могу активировать или объединить сервис в несколько потоков? Если это невозможно, как я могу добиться этого с помощью библиотеки потоков Python?

Заранее спасибо.

from spyne import Application, rpc, ServiceBase, Integer
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication

class HelloWorldService(ServiceBase):
    @rpc(Integer, Integer, _returns=Integer)
    def multiply(ctx, a, b):
        return a * b

application = Application([HelloWorldService],
    tns='spyne.multiply',
    in_protocol=Soap11(validator='lxml'),
    out_protocol=Soap11()
)

if __name__ == '__main__':
    # You can use any Wsgi server. Here, we chose
    # Python's built-in wsgi server but you're not
    # supposed to use it in production.
    from wsgiref.simple_server import make_server
    wsgi_app = WsgiApplication(application)
    server = make_server('0.0.0.0', 8000, wsgi_app)
    server.serve_forever()

1 Ответ

1 голос
/ 13 июля 2020

Spyne работает как с блокирующим, так и с асинхронным кодом c в однопоточных или многопоточных настройках.

Если вам нужно выполнять параллелизм с несколькими потоками, используйте сервер WSGI, способный обрабатывать несколько потоков, например CherryPy , Скрученный, mod_wsgi, эт c. Эталонная реализация WSGI, которую вы используете в примере кода (wsgiref), не поддерживает параллелизм.

Если вам нужно выполнить параллелизм с вызовами методов asyn c, используйте Twisted.

Примеры: расположен по адресу https://github.com/arskom/spyne/tree/master/examples

...