Do not remove thread buffers, reset them instead

This commit is contained in:
Ivan Kravets
2019-07-02 22:26:01 +03:00
parent 18d93dfcc9
commit 6c47c7506e

View File

@ -49,14 +49,12 @@ class MultiThreadingStdStream(object):
return self._buffers[thread_id].write( return self._buffers[thread_id].write(
value.decode() if is_bytes(value) else value) value.decode() if is_bytes(value) else value)
def get_value_and_close(self): def get_value_and_reset(self):
thread_id = thread_get_ident()
result = "" result = ""
try: try:
result = self.getvalue() result = self.getvalue()
self.close() self.truncate(0)
if thread_id in self._buffers: self.seek(0)
del self._buffers[thread_id]
except AttributeError: except AttributeError:
pass pass
return result return result
@ -88,11 +86,10 @@ class PIOCoreRPC(object):
def _call_inline(): def _call_inline():
with util.cd((options or {}).get("cwd") or os.getcwd()): with util.cd((options or {}).get("cwd") or os.getcwd()):
exit_code = __main__.main(["-c"] + args) exit_code = __main__.main(["-c"] + args)
return (PIOCoreRPC.thread_stdout.get_value_and_close(), return (PIOCoreRPC.thread_stdout.get_value_and_reset(),
PIOCoreRPC.thread_stderr.get_value_and_close(), exit_code) PIOCoreRPC.thread_stderr.get_value_and_reset(), exit_code)
d = threads.deferToThread(_call_inline) d = threads.deferToThread(_call_inline)
d.addCallback(PIOCoreRPC._call_callback, "--json-output" in args) d.addCallback(PIOCoreRPC._call_callback, "--json-output" in args)
d.addErrback(PIOCoreRPC._call_errback) d.addErrback(PIOCoreRPC._call_errback)
return d return d