Package concurrent_tree_crawler :: Module tree_saver_thread
[hide private]
[frames] | no frames]

Source Code for Module concurrent_tree_crawler.tree_saver_thread

 1  import threading 
 2  import os.path 
 3  import shutil 
 4   
 5  from concurrent_tree_crawler.common.tempdir import TempDir 
 6  from concurrent_tree_crawler.common.threads.sleep import Sleep 
 7  from concurrent_tree_crawler.xml_tree_serialization import XMLTreeWriter 
 8   
9 -class TreeSaverThread(threading.Thread):
10 - def __init__(self, dst_file_path, tree, sleep_time):
11 """ 12 @param sleep_time: sleep time between tree saves in seconds 13 @type tree: L{RWLockTreeAccessor} 14 """ 15 threading.Thread.__init__(self) 16 self.__path = dst_file_path 17 self.__tree = tree 18 self.__sleep_time = sleep_time 19 self.__should_stop = False 20 self.__sleep = Sleep()
21
22 - def run(self):
23 while not self.__should_stop: 24 self.__sleep.sleep(self.__sleep_time) 25 with TempDir() as temp_dir: 26 tmp_file_path = os.path.join(temp_dir.get_path(), "tree.xml") 27 with open(tmp_file_path, "w") as tmp_f: 28 writer = XMLTreeWriter(tmp_f) 29 self.__tree.get_lock().writer_acquire() 30 try: 31 sentinel = self.__tree.get_sentinel() 32 writer.write(sentinel) 33 finally: 34 self.__tree.get_lock().writer_release() 35 shutil.copyfile(tmp_file_path, self.__path)
36
37 - def stop_activity(self):
38 self.__should_stop = True 39 self.__sleep.wake_up()
40