X-Git-Url: https://git.phdru.name/?p=bookmarks_db.git;a=blobdiff_plain;f=Robots%2Fbkmk_rforking.py;h=cad8b2d0978e9ccb95c6560fa9164e047a991664;hp=4ad998403417398b15643f3de2809c4c7c382f22;hb=c88cb7a7;hpb=a04eaa0346e8aa5ad86a195f8f4d36487ebfe09c diff --git a/Robots/bkmk_rforking.py b/Robots/bkmk_rforking.py index 4ad9984..cad8b2d 100644 --- a/Robots/bkmk_rforking.py +++ b/Robots/bkmk_rforking.py @@ -4,7 +4,7 @@ This file is a part of Bookmarks database and Internet robot. """ __author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2000-2012 PhiloSoft Design" +__copyright__ = "Copyright (C) 2000-2017 PhiloSoft Design" __license__ = "GNU GPL" __all__ = ['robot_forking'] @@ -13,9 +13,9 @@ __all__ = ['robot_forking'] import sys, os try: - import cPickle as pickle + import cPickle as pickle except ImportError: - import pickle + import pickle from subproc import Subprocess, RecordFile from bkmk_objects import Robot @@ -29,74 +29,74 @@ check_subp = None subp_pipe = None def stop_subp(log): - global check_subp, subp_pipe - if check_subp: - if log: log(" restarting hanging subprocess") - del check_subp - del subp_pipe + global check_subp, subp_pipe + if check_subp: + if log: log(" restarting hanging subprocess") + del check_subp + del subp_pipe def restart_subp(log): - global check_subp, subp_pipe - stop_subp(log) + global check_subp, subp_pipe + stop_subp(log) - check_subp = Subprocess("%s/Robots/bkmk_rforking_sub.py" % os.path.dirname(sys.argv[0]), - control_stderr=True) - subp_pipe = RecordFile(check_subp) + check_subp = Subprocess("%s/Robots/bkmk_rforking_sub.py" % os.path.dirname(sys.argv[0]), + control_stderr=True) + subp_pipe = RecordFile(check_subp) _set_subproc = True class robot_forking(Robot): - subproc = 'urllib2' # Default subprocess - - def check_url(self, bookmark): - global _set_subproc - if _set_subproc: - _set_subproc = False - - subproc = self.subproc - subproc_attrs = [] - for attr in dir(self): - if attr.startswith('subproc_'): - subproc_attrs.append((attr[len('subproc_'):], getattr(self, attr))) - if subproc_attrs: - subproc += ':' + ':'.join(['='.join((k,v)) for k,v in subproc_attrs]) - os.environ['BKMK_ROBOT'] = subproc - - if not check_subp: - restart_subp(self.log) # Not restart, just start afresh - - try: - save_parent = bookmark.parent - bookmark.parent = None - subp_pipe.write_record(pickle.dumps(bookmark)) - - if check_subp.waitForPendingChar(60): # wait a minute - new_b = pickle.loads(subp_pipe.read_record()) - for attr in ("error", "no_error", - "moved", "size", "md5", "real_title", - "last_tested", "last_modified", "test_time", - "icon", "icon_href"): - if hasattr(new_b, attr): - setattr(bookmark, attr, getattr(new_b, attr)) - else: - bookmark.error = "Subprocess connection timed out" - restart_subp(self.log) - - bookmark.parent = save_parent - - while True: - error = check_subp.readPendingErrLine() - if not error: - break - sys.stderr.write("(subp) " + error) - sys.stderr.flush() - - except KeyboardInterrupt: - return 0 - - # Tested - return 1 - - def stop(self): - stop_subp(None) # Stop subprocess; do not log restarting + subproc = 'urllib2' # Default subprocess + + def check_url(self, bookmark): + global _set_subproc + if _set_subproc: + _set_subproc = False + + subproc = self.subproc + subproc_attrs = [] + for attr in dir(self): + if attr.startswith('subproc_'): + subproc_attrs.append((attr[len('subproc_'):], getattr(self, attr))) + if subproc_attrs: + subproc += ':' + ':'.join(['='.join((k,v)) for k,v in subproc_attrs]) + os.environ['BKMK_ROBOT'] = subproc + + if not check_subp: + restart_subp(self.log) # Not restart, just start afresh + + try: + save_parent = bookmark.parent + bookmark.parent = None + subp_pipe.write_record(pickle.dumps(bookmark)) + + if check_subp.waitForPendingChar(60): # wait a minute + new_b = pickle.loads(subp_pipe.read_record()) + for attr in ("error", "no_error", + "moved", "size", "md5", "real_title", + "last_tested", "last_modified", "test_time", + "icon", "icon_href"): + if hasattr(new_b, attr): + setattr(bookmark, attr, getattr(new_b, attr)) + else: + bookmark.error = "Subprocess connection timed out" + restart_subp(self.log) + + bookmark.parent = save_parent + + while True: + error = check_subp.readPendingErrLine() + if not error: + break + sys.stderr.write("(subp) " + error) + sys.stderr.flush() + + except KeyboardInterrupt: + return 0 + + # Tested + return 1 + + def stop(self): + stop_subp(None) # Stop subprocess; do not log restarting