Я изменил ответ sussudio. Теперь функция возвращает: (returncode
, stdout
, stderr
, timeout
) - stdout
и stderr
декодируется в строку utf-8
def kill_proc(proc, timeout):
timeout["value"] = True
proc.kill()
def run(cmd, timeout_sec):
proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
timeout = {"value": False}
timer = Timer(timeout_sec, kill_proc, [proc, timeout])
timer.start()
stdout, stderr = proc.communicate()
timer.cancel()
return proc.returncode, stdout.decode("utf-8"), stderr.decode("utf-8"), timeout["value"]
Если у вас есть Eureka / Zuul, я думаю, что - масштаб будет лучшим вариантом, так как он будет распределять нагрузку в циклическом порядке по вашим запросам, а порт, на котором он работает, не имеет значения.
Если вы хотите указать номер порта, то, я думаю, вам придется вручную установить номер порта expose или написать сценарий решения, ищущего следующий доступный номер порта в последовательности. Я думаю, что это дерьмовый подход, однако.