def _reconnect(cls, session, pilot_manager_id): """PRIVATE: reconnect to an existing pilot manager. """ uid_exists = PilotManagerController.uid_exists( db_connection=session._dbs, pilot_manager_uid=pilot_manager_id) if not uid_exists: raise BadParameter("PilotManager with id '%s' not in database." % pilot_manager_id) obj = cls(session=session, _reconnect=True) obj._uid = pilot_manager_id # Retrieve or start a worker process fo this PilotManager instance. worker = session._process_registry.retrieve(pilot_manager_id) if worker is not None: obj._worker = worker else: obj._worker = PilotManagerController( pilot_manager_uid=pilot_manager_id, pilot_manager_data={}, session=session, db_connection=session._dbs, db_connection_info=session._connection_info) session._process_registry.register(pilot_manager_id, obj._worker) # start the worker if it's not already running if obj._worker.is_alive() is False: obj._worker.start() return obj
def __init__(self, session, pilot_launcher_workers=1, _reconnect=False): """Creates a new PilotManager and attaches is to the session. .. note:: The `resource_configurations` (see :ref:`chapter_machconf`) parameter is currently mandatory for creating a new PilotManager instance. **Arguments:** * **session** [:class:`radical.pilot.Session`]: The session instance to use. * **resource_configurations** [`string` or `list of strings`]: A list of URLs pointing to :ref:`chapter_machconf`. Currently `file://`, `http://` and `https://` URLs are supported. If one or more resource_configurations are provided, Pilots submitted via this PilotManager can access the configuration entries in the files via the :class:`ComputePilotDescription`. For example:: pm = radical.pilot.PilotManager(session=s) pd = radical.pilot.ComputePilotDescription() pd.resource = "futuregrid.india" # defined in futuregrid.json pd.cores = 16 pd.runtime = 5 # minutes pilot = pm.submit_pilots(pd) * pilot_launcher_workers (`int`): The number of pilot launcher worker processes to start in the background. .. note:: `pilot_launcher_workers` can be used to tune RADICAL-Pilot's performance. However, you should only change the default values if you know what you are doing. **Returns:** * A new `PilotManager` object [:class:`radical.pilot.PilotManager`]. **Raises:** * :class:`radical.pilot.PilotException` """ self._session = session self._worker = None self._uid = None if _reconnect == True: return ############################### # Create a new pilot manager. # ############################### # Start a worker process fo this PilotManager instance. The worker # process encapsulates database access, persitency et al. self._worker = PilotManagerController( pilot_manager_uid=None, pilot_manager_data={}, pilot_launcher_workers=pilot_launcher_workers, session=self._session, db_connection=session._dbs, db_connection_info=session._connection_info) self._worker.start() self._uid = self._worker.pilot_manager_uid # Each pilot manager has a worker thread associated with it. The task # of the worker thread is to check and update the state of pilots, fire # callbacks and so on. self._session._pilot_manager_objects.append(self) self._session._process_registry.register(self._uid, self._worker)