Merge pull request #1 from zhiiw/feature_port

check port in use and add itself
This commit is contained in:
Zhangrp 2022-12-06 20:52:44 +08:00 committed by GitHub
commit 83aa6ff92c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 9 deletions

View File

@ -11,6 +11,7 @@ from .render import DependencyRenderer, EntityRenderer, SpanRenderer
from ..tokens import Doc, Span from ..tokens import Doc, Span
from ..errors import Errors, Warnings from ..errors import Errors, Warnings
from ..util import is_in_jupyter from ..util import is_in_jupyter
from ..util import is_port_in_use
_html = {} _html = {}
@ -74,14 +75,14 @@ def render(
def serve( def serve(
docs: Union[Iterable[Doc], Doc], docs: Union[Iterable[Doc], Doc],
style: str = "dep", style: str = "dep",
page: bool = True, page: bool = True,
minify: bool = False, minify: bool = False,
options: Dict[str, Any] = {}, options: Dict[str, Any] = {},
manual: bool = False, manual: bool = False,
port: int = 5000, port: int = 5000,
host: str = "0.0.0.0", host: str = "0.0.0.0",
) -> None: ) -> None:
"""Serve displaCy visualisation. """Serve displaCy visualisation.
@ -99,9 +100,15 @@ def serve(
""" """
from wsgiref import simple_server from wsgiref import simple_server
if is_port_in_use(port):
port += 1
while is_port_in_use(port) and port < 65535:
port += 1
if is_in_jupyter(): if is_in_jupyter():
warnings.warn(Warnings.W011) warnings.warn(Warnings.W011)
render(docs, style=style, page=page, minify=minify, options=options, manual=manual) render(docs, style=style, page=page, minify=minify, options=options, manual=manual)
httpd = simple_server.make_server(host, port, app) httpd = simple_server.make_server(host, port, app)
print(f"\nUsing the '{style}' visualizer") print(f"\nUsing the '{style}' visualizer")
print(f"Serving on http://{host}:{port} ...\n") print(f"Serving on http://{host}:{port} ...\n")

View File

@ -31,7 +31,7 @@ import shlex
import inspect import inspect
import pkgutil import pkgutil
import logging import logging
import socket
try: try:
import cupy.random import cupy.random
except ImportError: except ImportError:
@ -1736,3 +1736,8 @@ def all_equal(iterable):
(or if the input is an empty sequence), False otherwise.""" (or if the input is an empty sequence), False otherwise."""
g = itertools.groupby(iterable) g = itertools.groupby(iterable)
return next(g, True) and not next(g, False) return next(g, True) and not next(g, False)
def is_port_in_use(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', port)) == 0