Python Tornado Swagger: только одно использование каждого адреса сокета - PullRequest
0 голосов
/ 30 мая 2020

Я запускаю свой проект на последней версии PyCharm. Когда я запускаю свой main.py, он работает хорошо и желательно. Но если я перезапускаю (или повторно запускаю) main.py, я получаю ошибку

OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

Никаких других запущенных приложений нет. Python - единственное, что сейчас на компьютере. Никакого другого использования портов. Единственный способ пропустить эту ошибку - перезагрузить компьютер или удалить все python из диспетчера задач.

Кроме того, после остановки службы Swagger по-прежнему доступен в браузере , я думаю, что это swagger использует порт для main (потому что они работают вместе), и поэтому я не могу запустить свой main.py.

Один из способов воспроизвести эту ошибку - запустить этот MWE, затем остановить и закрыть PyCharm или просто закройте Pycharm, затем попробуйте перезапустить его, и снова появится сообщение об ошибке, а swagger все еще работает !. Это происходит, когда я пишу код и пытаюсь запустить написанное мной новое.

MWE:

from tornado.ioloop import IOLoop
from tornado_swagger.setup import setup_swagger
from tornado.options import parse_command_line,define,options
from tornado.web import Application,url,RequestHandler
class TestRequests(RequestHandler):
    def get(self,var1):
        """
        ---
        tags:
        - Testing
        summary: minimal working example
        description: some dummy text
        produces:
        - requestsBody:
        - application/json
        parameters:
        -   name: var1
            in: path
            description: dummy tet
            required: true
            type: string
        responses:
            200:
              description: dummy response for dummy requests here and now
        """
        print(f"Reveived GET tests for {var1}")
        res = {"result": "hello",
               "product": str(var1)+"-foo"}
        self.write(res)
class Applications(Application):
    urls = [
        url(r"/api/(?P<var1>[a-zA-Z0-9]+)/test",TestRequests)
           ]
    def __init__(self):
        settings = {'debug': True}
        setup_swagger(self.urls,
                      swagger_url = '/swagger',
                      api_base_url="/Base",
                      description = "test swagger",
                      title = "test title")
        super(Applications,self).__init__(self.urls,**settings)
define('port', default='8088', help='Port to listen on')
if __name__ == "__main__":
    print("running")
    parse_command_line()
    app = Applications()
    app.listen(options.port)
    IOLoop.current().start()
...