mirror of
https://github.com/clearml/clearml-agent
synced 2025-01-31 09:06:52 +00:00
Add terminate process and rmtree utilities
This commit is contained in:
parent
f8ea445339
commit
c6d998c4df
@ -173,13 +173,30 @@ def normalize_path(*paths):
|
|||||||
|
|
||||||
|
|
||||||
def safe_remove_file(filename, error_message=None):
|
def safe_remove_file(filename, error_message=None):
|
||||||
|
# noinspection PyBroadException
|
||||||
try:
|
try:
|
||||||
os.remove(filename)
|
if filename:
|
||||||
|
os.remove(filename)
|
||||||
except Exception:
|
except Exception:
|
||||||
if error_message:
|
if error_message:
|
||||||
print(error_message)
|
print(error_message)
|
||||||
|
|
||||||
|
|
||||||
|
def safe_remove_tree(filename):
|
||||||
|
if not filename:
|
||||||
|
return
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
|
shutil.rmtree(filename, ignore_errors=True)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
|
os.remove(filename)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def get_python_path(script_dir, entry_point, package_api):
|
def get_python_path(script_dir, entry_point, package_api):
|
||||||
try:
|
try:
|
||||||
python_path_sep = ';' if is_windows_platform() else ':'
|
python_path_sep = ';' if is_windows_platform() else ':'
|
||||||
|
@ -11,6 +11,7 @@ from copy import deepcopy
|
|||||||
from distutils.spawn import find_executable
|
from distutils.spawn import find_executable
|
||||||
from itertools import chain, repeat, islice
|
from itertools import chain, repeat, islice
|
||||||
from os.path import devnull
|
from os.path import devnull
|
||||||
|
from time import sleep
|
||||||
from typing import Union, Text, Sequence, Any, TypeVar, Callable
|
from typing import Union, Text, Sequence, Any, TypeVar, Callable
|
||||||
|
|
||||||
import psutil
|
import psutil
|
||||||
@ -41,6 +42,29 @@ def get_bash_output(cmd, strip=False, stderr=subprocess.STDOUT, stdin=False):
|
|||||||
return output if not strip or not output else output.strip()
|
return output if not strip or not output else output.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def terminate_process(pid, timeout=10.):
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
|
proc = psutil.Process(pid)
|
||||||
|
proc.terminate()
|
||||||
|
cnt = 0
|
||||||
|
while proc.is_running() and cnt < timeout:
|
||||||
|
sleep(1.)
|
||||||
|
cnt += 1
|
||||||
|
proc.terminate()
|
||||||
|
cnt = 0
|
||||||
|
while proc.is_running() and cnt < timeout:
|
||||||
|
sleep(1.)
|
||||||
|
cnt += 1
|
||||||
|
proc.kill()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
|
return not psutil.Process(pid).is_running()
|
||||||
|
except Exception:
|
||||||
|
return True
|
||||||
|
|
||||||
def kill_all_child_processes(pid=None):
|
def kill_all_child_processes(pid=None):
|
||||||
# get current process if pid not provided
|
# get current process if pid not provided
|
||||||
include_parent = True
|
include_parent = True
|
||||||
|
Loading…
Reference in New Issue
Block a user