From d16af666b5fc165d1f231a04ce6c1609563b7e74 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sun, 28 Jun 2015 22:45:34 +0200 Subject: mytasks : début d'implementation a l'aide de multiprocessing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mytasks.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 14 deletions(-) (limited to 'mytasks.py') diff --git a/mytasks.py b/mytasks.py index 6c03262..9ec40b7 100644 --- a/mytasks.py +++ b/mytasks.py @@ -18,22 +18,32 @@ # You should have received a copy of the GNU General Public License # along with RaidGuessFS. If not, see -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 -- cgit v1.2.3