Ignore:
Timestamp:
Oct 23, 2018, 9:16:33 AM (14 months ago)
Author:
Juanma
Message:

improved performance

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/debManager.py

    r8084 r8180  
    33gi.require_version('PackageKitGlib', '1.0')
    44from gi.repository import PackageKitGlib as packagekit
     5import threading
     6from queue import Queue as pool
    57class debmanager:
    68        def __init__(self):
     
    3941        #filter=2 -> only installed app installed
    4042        def execute_action(self,action,applist,filters=1):
     43                self._debug("Executing action %s"%action)
    4144                self.progress=0
    4245                self.installer=packagekit.Client()
     
    7477                self.result['status']={'status':status,'msg':msg}
    7578
    76         def _fake_callback(self,status,typ,data=None):
     79        def _fake_callback(self,*args):
    7780                pass
    7881        #def _fake_callback
     
    8588        def _install_App(self,app):
    8689                self.return_msg=False
    87                 self._debug("Installing "+app.get_id())
     90                self._debug("Installing %s"%app.get_id())
    8891                err=0
    8992                try:
     
    9295                except Exception as e:
    9396                        print(str(e))
    94                         self._debug("Install error: "+str(e.code))
     97                        self._debug("Install error: %s"%e.code)
    9598                        err=e.code
    9699                finally:
     
    105108                        self._set_status(0)
    106109                except Exception as e:
    107                         self._debug("Remove error: " +str(e.code))
    108                         self._debug("Remove error: " +str(e))
     110                        self._debug("Remove error: %s"%e.code)
     111                        self._debug("Remove error: %s"%e)
    109112                        self._set_status(e.code)
    110113                finally:
     
    112115        #def _remove_App
    113116
     117        def _th_get_details(self,pkTask,app_info_pool,app):
     118                self._debug("Getting details for %s"%app.get_id())
     119                results=pkTask.get_details([app.get_id(),],None,self._fake_callback,None)
     120                for app_detail in results.get_details_array():
     121                        app_info_pool.put({'size':str(app_detail.get_size())})
     122                        break
     123        #def _th_get_details
     124
     125        def _th_get_depends(self,pkTask,app_info_pool,app):
     126                self._debug("Getting dependencies for %s"%app.get_id())
     127                results=pkTask.get_depends(1,[app.get_id(),],False,None,self._fake_callback,None)
     128                dependsList=[]
     129                for related_app in results.get_package_array():
     130                        dependsList.append(related_app.get_id())
     131                app_info_pool.put({'depends':dependsList})
     132        #def _th_get_depends
     133
    114134        def _get_App_Extended_Info(self,app_info,app):
    115                 self._debug("Getting dependencies for "+app.get_id())
     135                app_info['version']=app.get_version()
     136                app_info['arch']=app.get_id().split(';')[2]
    116137                pkTask=packagekit.Task()
    117138                results=[]
    118                 dependsList=[]
    119139                self._set_status(0)
    120                 try:
    121                         results=pkTask.get_depends(1,[app.get_id(),],True,None,self._fake_callback,None)
    122                 except Exception as e:
    123 #                       self._set_status(1)
    124                         print (str(e))
    125                         pass
    126                 if (results):
    127                         app_info['version']=app.get_version()
    128                         app_info['arch']=app.get_id().split(';')[2]
    129                         for related_app in results.get_package_array():
    130                                 dependsList.append(related_app.get_id())
    131                         app_info['depends']=dependsList
    132                         #app.get_version()
    133                 try:
    134                         results=pkTask.get_details([app.get_id(),],None,self._fake_callback,None)
    135                 except Exception as e:
    136 #                       self._set_status(1)
    137                         print ("ERROR %s"%e)
    138                         pass
    139                 if(results):
    140                         for app_detail in results.get_details_array():
    141                                 app_info['size']=str(app_detail.get_size())
    142                                 break
     140                app_info_pool=pool()
     141                threads=[]
     142                th=threading.Thread(target=self._th_get_details, args = (pkTask,app_info_pool,app))
     143                threads.append(th)
     144                th.start()
     145                #Get depends disabled per time-costing
     146                #th=threading.Thread(target=self._th_get_depends, args = (pkTask,app_info_pool,app))
     147                #threads.append(th)
     148                #th.start()
    143149                try:
    144150                        info=app.get_info()
     
    150156                        self._debug("State: "+app_info['state'])
    151157                except Exception as e:
    152                         self._debug("State: not available")
    153                                
     158                        self._debug("State: not available (%s)"%e)
     159
     160                for thread in threads:
     161                        try:
     162                                thread.join()
     163                        except:
     164                                pass
     165
     166                while app_info_pool.qsize():
     167                        data=app_info_pool.get()
     168                        app_info.update(data)
     169
    154170                return(app_info)
    155171        #def _get_App_Extended_Info
    156172
    157173        def _resolve_App(self,app_name,filters=1):
    158                 self._debug("Resolving "+app_name)
     174                self._debug("Resolving %s"%app_name)
    159175                app=None
    160176                resolvelist=[]
    161177                self.return_msg=False
    162178                try:
    163                         self._debug("Filter for resolver: "+str(filters))
     179                        self._debug("Filter for resolver: %s"%filters)
    164180                        result=self.installer.resolve(filters,[app_name,],None,self._fake_callback, None)
    165181                        resolvelist=result.get_package_array()
     
    171187                                                app_resolved=app
    172188                        if app_resolved:
    173                                 self._debug("Application "+app_resolved.get_name()+" resolved succesfully")
     189                                self._debug("Application %s resolved succesfully"%app_resolved.get_name())
    174190                                app=app_resolved
    175191                except Exception as e:
    176                         self._debug("Couldn't resolve "+app_name)
    177                         self._debug("Reason: "+str(e))
     192                        self._debug("Couldn't resolve %s"%app_name)
     193                        self._debug("Reason: %s"%e)
    178194                finally:
    179195                        self.partial_progress=100
Note: See TracChangeset for help on using the changeset viewer.