Я запускаю свой проект на последней версии 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()