Spaces:
Sleeping
Sleeping
| import os | |
| import socket | |
| import time | |
| import uuid | |
| from contextlib import closing | |
| from threading import Thread | |
| from typing import Any | |
| def get_ip() -> str: | |
| """ | |
| Overview: | |
| Get the ``ip(host)`` of socket | |
| Returns: | |
| - ip(:obj:`str`): The corresponding ip | |
| """ | |
| # beware: return 127.0.0.1 on some slurm nodes | |
| myname = socket.getfqdn(socket.gethostname()) | |
| myaddr = socket.gethostbyname(myname) | |
| return myaddr | |
| def get_pid() -> int: | |
| """ | |
| Overview: | |
| ``os.getpid`` | |
| """ | |
| return os.getpid() | |
| def get_task_uid() -> str: | |
| """ | |
| Overview: | |
| Get the slurm ``job_id``, ``pid`` and ``uid`` | |
| """ | |
| return '{}_{}'.format(str(uuid.uuid4()), str(time.time())[-6:]) | |
| class PropagatingThread(Thread): | |
| """ | |
| Overview: | |
| Subclass of Thread that propagates execution exception in the thread to the caller | |
| Interfaces: | |
| ``run``, ``join`` | |
| Examples: | |
| >>> def func(): | |
| >>> raise Exception() | |
| >>> t = PropagatingThread(target=func, args=()) | |
| >>> t.start() | |
| >>> t.join() | |
| """ | |
| def run(self) -> None: | |
| """ | |
| Overview: | |
| Run the thread | |
| """ | |
| self.exc = None | |
| try: | |
| self.ret = self._target(*self._args, **self._kwargs) | |
| except Exception as e: | |
| self.exc = e | |
| def join(self) -> Any: | |
| """ | |
| Overview: | |
| Join the thread | |
| """ | |
| super(PropagatingThread, self).join() | |
| if self.exc: | |
| raise RuntimeError('Exception in thread({})'.format(id(self))) from self.exc | |
| return self.ret | |
| def find_free_port(host: str) -> int: | |
| """ | |
| Overview: | |
| Look up the free port list and return one | |
| Arguments: | |
| - host (:obj:`str`): The host | |
| """ | |
| with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: | |
| s.bind(('', 0)) | |
| return s.getsockname()[1] | |