diff options
Diffstat (limited to 'mytasks.py')
-rw-r--r-- | mytasks.py | 64 |
1 files changed, 50 insertions, 14 deletions
@@ -18,22 +18,32 @@ # You should have received a copy of the GNU General Public License # along with RaidGuessFS. If not, see <http://www.gnu.org/licenses/> -import logging +import multiprocessing, logging +import mydisks + +def do_find_files(d,state): + state['TODO'] = 'Not yet implemented' + + +def do_find_bootsect(d,state): + state['TODO'] = 'Not yet implemented' + + class MyTasks(): """Auxiliary class, managing long or background tasks""" TASK_NAMES = [ 'find_bootsect', 'find_files' ] - def __init__(self, *args, **kwargs): + def __init__(self, mydisks): self.tasks = [] + self.d = mydisks self.find_files_pathlist = [] - - def get_task_start(self): - return 'Write a task_name in this pseudo-file to start it\n' - - def get_task_kill(self): - return 'Write a task_name in this pseudo-file to kill it\n' + m = multiprocessing.Manager() + self.find_bootsect_state = m.dict() + self.find_bootsect_process = None + self.find_files_state = m.dict() + self.find_files_process = None def get_find_files_pathlist(self): return self.find_files_pathlist @@ -41,18 +51,44 @@ class MyTasks(): def get_find_files_pathlist_str(self): return '\n'.join(self.find_files_pathlist) - def set_task_start(self, task_name): - raise Exception('Not yet implemented') + def task_start(self, task_name): + if task_name == 'find_files': + self.find_files_process = multiprocessing.Process( + target = do_find_files, + args = (self.d, self.find_files_state) + ) + self.find_files_process.start() + elif task_name == 'find_bootsect': + self.find_bootsect_process = multiprocessing.Process( + target = do_find_bootsect, + args = (self.d, self.find_bootsect_state) + ) + self.find_bootsect_process.start() + else: + raise ValueError('Valid task names are : %s'%','.join(MyTasks.TASK_NAMES)) - def set_task_kill(self, task_name): - raise Exception('Not yet implemented') + def task_kill(self, task_name): + if task_name == 'find_bootsect': + if self.find_bootsect_process != None and self.find_bootsect_process.is_alive(): + self.find_bootsect_process.terminate() + elif task_name == 'find_files': + if self.find_files_process != None and self.find_files_process.is_alive(): + self.find_files_process.terminate() + else: + raise ValueError('Valid task names are : %s'%','.join(MyTasks.TASK_NAMES)) def set_find_files_pathlist(self, new_find_files_pathlist): self.find_files_pathlist = new_find_files_pathlist def read_find_bootsect(self): - return 'This task is not started\n' + if self.find_bootsect_process == None: + return 'This task has never been started\n' + else: + return 'TODO\n%s\n'%self.find_bootsect_state def read_find_files(self): - return 'This task is not started\n' + if self.find_files_process == None: + return 'This task has never been started\n' + else: + return 'TODO\n%s\n'%self.find_files_state |