Beispiel #1
0
    def make_connection(self, job_id: str, myinputstart: int, myinputend: int,
                        myoutputstart: int, myoutputend: int,
                        partner: WorkerPartner):
        self.logger("Connecting to: {}".format(str(partner)))
        wp = WorkerPartner()
        wp.job_id = job_id
        wp.state_index_start = myinputstart
        wp.state_index_end = myinputend
        wp.output_index_start = myoutputstart
        wp.output_index_end = myoutputend

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((partner.addr, partner.port))
        sock = FormatSocket(sock)
        sock.send(wp.SerializeToString())

        fullkey = (job_id, partner.state_index_start, partner.state_index_end,
                   partner.output_index_start, partner.output_index_end)
        inputkey = (job_id, partner.state_index_start, partner.state_index_end)
        outputkey = (job_id, partner.output_index_start,
                     partner.output_index_end)
        with self.workerlock:
            self.workers[fullkey] = sock

            if inputkey not in self.inputrange_workers:
                self.inputrange_workers[inputkey] = []
            self.inputrange_workers[inputkey].append(
                (sock, partner.output_index_start, partner.output_index_end))

            if outputkey not in self.outputrange_workers:
                self.outputrange_workers[outputkey] = []
            self.outputrange_workers[outputkey].append(
                (sock, partner.state_index_start, partner.state_index_end))
Beispiel #2
0
    def __init__(self,
                 addr: str = 'localhost',
                 port: int = 1708,
                 bindaddr: str = 'localhost',
                 bindport: int = 0,
                 worker_n: int = 28,
                 logger: WorkerLogger = None):
        super().__init__()

        if logger is None:
            self.logger = PrintLogger()
        else:
            self.logger = logger

        sock = socket.socket()
        sock.connect((addr, port))
        b = sock.recv(1)
        if b != b'\x00':
            sock = ssl.wrap_socket(sock)
        self.socket = FormatSocket(sock)

        self.pool = WorkerPoolServer(bindaddr, bindport, logger=logger)
        self.pool.start()

        workerinfo = HostInformation()
        workerinfo.worker_info.n_qubits = worker_n
        workerinfo.worker_info.address = self.pool.addr
        workerinfo.worker_info.port = self.pool.port

        self.socket.send(workerinfo.SerializeToString())
        self.serverapi = SocketServerBackend(self.socket)
        self.addr = addr
        self.port = port
        self.running = True
Beispiel #3
0
    def run(self):
        self.logger.starting_server()
        self.sock.listen(5)
        self.logger.accepting_connections()
        while True:
            sock, _ = self.sock.accept()
            sock = FormatSocket(sock)
            workersetup = WorkerPartner.FromString(sock.recv())
            self.logger.accepted_connection()

            fullkey = (workersetup.job_id, workersetup.state_index_start,
                       workersetup.state_index_end,
                       workersetup.output_index_start,
                       workersetup.output_index_end)
            inputkey = (workersetup.job_id, workersetup.state_index_start,
                        workersetup.state_index_end)
            outputkey = (workersetup.job_id, workersetup.output_index_start,
                         workersetup.output_index_end)

            with self.workerlock:
                if inputkey not in self.inputrange_workers:
                    self.inputrange_workers[inputkey] = []
                if outputkey not in self.outputrange_workers:
                    self.outputrange_workers[outputkey] = []

                self.workers[fullkey] = sock
                self.inputrange_workers[inputkey].append(
                    (sock, workersetup.output_index_start,
                     workersetup.output_index_end))
                self.outputrange_workers[outputkey].append(
                    (sock, workersetup.state_index_start,
                     workersetup.state_index_end))
Beispiel #4
0
    def __init__(self, addr: str = 'localhost', port: int = 6060):
        super().__init__()
        self.addr = addr
        self.port = port
        self.worker_id = str(uuid.uuid4())

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((self.addr, self.port))
        self.sock = FormatSocket(sock)

        host_info = LoggerHostInfo()
        host_info.worker.worker_id = self.worker_id
        self.sock.send(host_info.SerializeToString())

        self.proto_arena = WorkerLog()
Beispiel #5
0
    def __init__(self,
                 n,
                 server_host: str = 'localhost',
                 server_port: int = 1708):
        super().__init__(n, None)
        self.control_server_addr = (server_host, server_port)

        sock = socket.socket()
        sock.connect(self.control_server_addr)
        # First byte is whether to use ssl or not, all remaining communication is proto based.
        b = sock.recv(1)
        if b != b'\x00':
            sock = ssl.wrap_socket(sock)
        self.socket = FormatSocket(sock)

        # Introduce yourself.
        host_info = HostInformation()
        host_info.client_info.name = 'backend'
        self.socket.send(host_info.SerializeToString())