From f7b5f0f25696a8313578f9593d48ca4f260a83a4 Mon Sep 17 00:00:00 2001 From: Su Tian Date: Sun, 20 Dec 2020 07:53:21 -0500 Subject: [PATCH] 1220 added timeout for process running --- presg.py | 15 ++++++++------- utils.py | 21 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/presg.py b/presg.py index 6839dd1..f1c2561 100644 --- a/presg.py +++ b/presg.py @@ -278,7 +278,7 @@ def preSG1D(xr_sg, smdim): return sg -def preSG(sg_xml, analysis, ppcmd='prevabs', solver='swiftcomp', write_input=True, scrnout=True): +def preSG(sg_xml, analysis, ppcmd='prevabs', solver='swiftcomp', write_input=True, timeout=30, scrnout=True): """ Preprocessor of a structure gene. Parameters @@ -331,12 +331,13 @@ def preSG(sg_xml, analysis, ppcmd='prevabs', solver='swiftcomp', write_input=Tru cmd.append('-' + analysis) # cmd = ' '.join(cmd) - if scrnout: - print('cmd:', cmd) - sbp.call(cmd) - else: - FNULL = open(os.devnull, 'w') - sbp.call(cmd, stdout=FNULL, stderr=sbp.STDOUT) + utl.run(cmd, timeout, scrnout) + # if scrnout: + # print('cmd:', cmd) + # sbp.call(cmd) + # else: + # FNULL = open(os.devnull, 'w') + # sbp.call(cmd, stdout=FNULL, stderr=sbp.STDOUT) return fn_sg_in, smdim diff --git a/utils.py b/utils.py index d87bbb9..9f21b79 100644 --- a/utils.py +++ b/utils.py @@ -1,11 +1,30 @@ import os +import sys import math +import subprocess as sbp import numpy as np -# import pandas as pd import xml.etree.ElementTree as et import msgpi.sg as sgm +def run(cmd, timeout, scrnout): + # proc = sbp.Popen(cmd, stdout=sbp.PIPE, stderr=sbp.PIPE) + if scrnout: + # sbp.call(cmd) + proc = sbp.Popen(cmd) + else: + FNULL = open(os.devnull, 'w') + # sbp.call(cmd, stdout=FNULL, stderr=sbp.STDOUT) + proc = sbp.Popen(cmd, stdout=FNULL, stderr=sbp.STDOUT) + + try: + stdout, stderr = proc.communicate(timeout=timeout) + except sbp.TimeoutExpired as e: + print('TimeoutExpired') + proc.kill() + print('Process killed') + + def tilde(v): """ ~v_{ij} = -e_{ijk} * v_k