2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
3
from __future__ import with_statement
6
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
7
__docformat__ = 'restructuredtext en'
9
import os, cPickle, sys
10
from multiprocessing.connection import Client
11
from threading import Thread
12
from Queue import Queue
13
from contextlib import closing
14
from binascii import unhexlify
15
from calibre import prints
19
('calibre.gui2.lrf_renderer.main', 'main', None),
22
('calibre.gui2.viewer.main', 'main', None),
25
('calibre.ebooks.comic.input', 'render_pages', 'notification'),
28
('calibre.gui2.convert.gui_conversion', 'gui_convert', 'notification'),
31
('calibre.library.move', 'move_library', 'notification'),
34
('calibre.ebooks.metadata.worker', 'read_metadata_', 'notification'),
37
('calibre.utils.podofo.__init__', 'get_metadata_', None),
39
'write_pdf_metadata' :
40
('calibre.utils.podofo.__init__', 'set_metadata_', None),
43
('calibre.ebooks.metadata.worker', 'save_book', 'notification'),
46
class Progress(Thread):
48
def __init__(self, conn):
54
def __call__(self, percent, msg=''):
55
self.queue.put((percent, msg))
70
module, func, notification = PARALLEL_FUNCS[name]
71
module = __import__(module, fromlist=[1])
72
func = getattr(module, func)
73
return func, notification
76
address = cPickle.loads(unhexlify(os.environ['CALIBRE_WORKER_ADDRESS']))
77
key = unhexlify(os.environ['CALIBRE_WORKER_KEY'])
78
resultf = unhexlify(os.environ['CALIBRE_WORKER_RESULT'])
79
with closing(Client(address, authkey=key)) as conn:
80
name, args, kwargs, desc = conn.recv()
84
func, notification = get_func(name)
85
notifier = Progress(conn)
87
kwargs[notification] = notifier
90
result = func(*args, **kwargs)
91
if result is not None:
92
cPickle.dump(result, open(resultf, 'wb'), -1)
94
notifier.queue.put(None)
102
if __name__ == '__main__':