mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Refactor for re-use
This commit is contained in:
parent
c356e09dcf
commit
78a5c3fd0f
@ -49,6 +49,32 @@ if iswindows:
|
|||||||
from calibre.utils.ipc.launch import windows_null_file
|
from calibre.utils.ipc.launch import windows_null_file
|
||||||
worker_kwargs['stdout'] = worker_kwargs['stderr'] = windows_null_file
|
worker_kwargs['stdout'] = worker_kwargs['stderr'] = windows_null_file
|
||||||
|
|
||||||
|
def get_stdout(process):
|
||||||
|
import time
|
||||||
|
while process.poll() is None:
|
||||||
|
try:
|
||||||
|
raw = process.stdout.read(1)
|
||||||
|
if raw:
|
||||||
|
try:
|
||||||
|
sys.stdout.write(raw)
|
||||||
|
except EnvironmentError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
time.sleep(0.1)
|
||||||
|
except (EOFError, EnvironmentError):
|
||||||
|
break
|
||||||
|
|
||||||
|
def start_worker(code, name=''):
|
||||||
|
from calibre.utils.ipc.simple_worker import start_pipe_worker
|
||||||
|
if name:
|
||||||
|
name = '-' + name
|
||||||
|
p = start_pipe_worker(code, **worker_kwargs)
|
||||||
|
if get_stdout_from_child:
|
||||||
|
t = Thread(target=get_stdout, name='PoolWorkerGetStdout' + name, args=(p,))
|
||||||
|
t.daemon = True
|
||||||
|
t.start()
|
||||||
|
return p
|
||||||
|
|
||||||
class Failure(Exception):
|
class Failure(Exception):
|
||||||
|
|
||||||
def __init__(self, tf):
|
def __init__(self, tf):
|
||||||
@ -63,10 +89,6 @@ class Worker(object):
|
|||||||
self.process, self.conn = p, conn
|
self.process, self.conn = p, conn
|
||||||
self.events = events
|
self.events = events
|
||||||
self.name = name or ''
|
self.name = name or ''
|
||||||
if get_stdout_from_child:
|
|
||||||
t = Thread(target=self.get_stdout, name='PoolWorkerGetOutput-'+self.name)
|
|
||||||
t.daemon = True
|
|
||||||
t.start()
|
|
||||||
|
|
||||||
def __call__(self, job):
|
def __call__(self, job):
|
||||||
eintr_retry_call(self.conn.send_bytes, cPickle.dumps(job, -1))
|
eintr_retry_call(self.conn.send_bytes, cPickle.dumps(job, -1))
|
||||||
@ -89,21 +111,6 @@ class Worker(object):
|
|||||||
def set_common_data(self, data):
|
def set_common_data(self, data):
|
||||||
eintr_retry_call(self.conn.send_bytes, data)
|
eintr_retry_call(self.conn.send_bytes, data)
|
||||||
|
|
||||||
def get_stdout(self):
|
|
||||||
import time
|
|
||||||
while self.process.poll() is None:
|
|
||||||
try:
|
|
||||||
raw = self.process.stdout.read(1)
|
|
||||||
if raw:
|
|
||||||
try:
|
|
||||||
sys.stdout.write(raw)
|
|
||||||
except EnvironmentError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
time.sleep(0.1)
|
|
||||||
except (EOFError, EnvironmentError):
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
class Pool(Thread):
|
class Pool(Thread):
|
||||||
|
|
||||||
@ -175,9 +182,7 @@ class Pool(Thread):
|
|||||||
self.shutdown_workers(wait_time=wait_time)
|
self.shutdown_workers(wait_time=wait_time)
|
||||||
|
|
||||||
def create_worker(self):
|
def create_worker(self):
|
||||||
from calibre.utils.ipc.simple_worker import start_pipe_worker
|
p = start_worker('from {0} import run_main, {1}; run_main({1})'.format(self.__class__.__module__, 'worker_main'))
|
||||||
p = start_pipe_worker(
|
|
||||||
'from {0} import run_main, {1}; run_main({1})'.format(self.__class__.__module__, 'worker_main'), **worker_kwargs)
|
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
eintr_retry_call(p.stdin.write, self.worker_data)
|
eintr_retry_call(p.stdin.write, self.worker_data)
|
||||||
p.stdin.flush(), p.stdin.close()
|
p.stdin.flush(), p.stdin.close()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user