diff options
| author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 | 
|---|---|---|
| committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 | 
| commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
| tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /build/scripts/python_yndexer.py | |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'build/scripts/python_yndexer.py')
| -rw-r--r-- | build/scripts/python_yndexer.py | 53 | 
1 files changed, 53 insertions, 0 deletions
diff --git a/build/scripts/python_yndexer.py b/build/scripts/python_yndexer.py new file mode 100644 index 00000000000..3180665387d --- /dev/null +++ b/build/scripts/python_yndexer.py @@ -0,0 +1,53 @@ +import os +import sys +import threading +import subprocess + + +def _try_to_kill(process): +    try: +        process.kill() +    except Exception: +        pass + + +def touch(path): +    if not os.path.exists(path): +        with open(path, 'w') as _: +            pass + + +class Process(object): +    def __init__(self, args): +        self._process = subprocess.Popen(args) +        self._event = threading.Event() +        self._result = None +        thread = threading.Thread(target=self._run) +        thread.setDaemon(True) +        thread.start() + +    def _run(self): +        self._process.communicate() +        self._result = self._process.returncode +        self._event.set() + +    def wait(self, timeout): +        self._event.wait(timeout=timeout) +        _try_to_kill(self._process) +        return self._result + + +if __name__ == '__main__': +    yndexer = sys.argv[1] +    timeout = int(sys.argv[2]) +    output_file = sys.argv[3] +    input_file = sys.argv[4] +    partition_count = sys.argv[5] +    partition_index = sys.argv[6] + +    process = Process([yndexer, '-f', input_file, '-y', output_file, '-c', partition_count, '-i', partition_index]) +    result = process.wait(timeout=timeout) + +    if result != 0: +        print >> sys.stderr, 'Yndexing process finished with code', result +        touch(output_file)  | 
