def __init__(self, master_host, master_port, node_key, worker_key): self.id = id self.__task = None self.__task_instance = None self.__results = None self.__stop_flag = None self.__lock = Lock() self.__lock_connection = Lock() self.master = None self.master_host = master_host self.master_port = master_port self.node_key = node_key self.worker_key = worker_key self.reconnect_count = 0 # load crypto for authentication # workers use the same keys as their parent Node self.pub_key, self.priv_key = load_crypto("./node.key") self.master_pub_key = load_crypto("./node.master.key", False, both=False) self.rsa_client = RSAClient(self.priv_key) # load tasks that are cached locally self.task_manager = TaskManager() self.task_manager.autodiscover() self.available_tasks = self.task_manager.registry logger.info("Started Worker: %s" % worker_key) self.connect()
def __init__(self): self.workers = {} self.port = 11890 self.host='localhost' self.password_file = 'node.password' self.node_key = None self.initialized = False self.__lock = Lock() #load crypto keys for authentication self.pub_key, self.priv_key = load_crypto('./node.key') self.master_pub_key = load_crypto('./node.master.key', create=False, both=False) #load tasks that are cached locally self.available_tasks = {} # get information about the server self.determine_info() service = ZeroconfService(name=platform.node(), port=self.port, stype="_pydra._tcp") service.publish() logger.info('Node - starting server on port %s' % self.port)
def __init__(self): logger.info('====== starting master ======') #locks self._lock = Lock() #general lock, use when multiple shared resources are touched self._lock_queue = Lock() #for access to _queue #load rsa crypto self.pub_key, self.priv_key = load_crypto('./master.key') self.rsa_client = RSAClient(self.priv_key, self.pub_key, callback=self.init_node) #load tasks queue self._running = list(TaskInstance.objects.running()) self._running_workers = {} self._queue = list(TaskInstance.objects.queued()) #task statuses self._task_statuses = {} self._next_task_status_update = datetime.datetime.now() #cluster management self.workers = {} self.nodes = self.load_nodes() self.known_nodes = set() self._workers_idle = [] self._workers_working = {} #connection management self.connecting = True self.reconnect_count = 0 self.attempts = None self.reconnect_call_ID = None #load tasks that are cached locally #the master won't actually run the tasks unless there is also #a node running locally, but it will be used to inform the controller what is available self.task_manager = TaskManager() self.task_manager.autodiscover() self.available_tasks = self.task_manager.registry self.connect() self.host = 'localhost' self.autodiscovery()