コード例 #1
0
ファイル: worker.py プロジェクト: jlg/pydra-map-reduce
    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()
コード例 #2
0
ファイル: node.py プロジェクト: jlg/pydra-map-reduce
    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)
コード例 #3
0
ファイル: master.py プロジェクト: jlg/pydra-map-reduce
    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()