file_juggler.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:piwheels 作者: bennuttall 项目源码 文件源码
def handle_file(self, queue):
        """
        Handle incoming file-transfer messages from build slaves.

        The file transfer protocol is in some ways very simple (see the chart
        in the :doc:`slaves` chapter for an overview of the message sequence)
        and in some ways rather complex (read the ZeroMQ guide chapter on file
        transfers for more detail on why multiple messages must be allowed in
        flight simultaneously).

        The "normal" state for a file transfer is to be requesting and
        receiving chunks. Anything else, including redundant re-sends, and
        transfer completion is handled as an exceptional case.
        """
        address, msg, *args = queue.recv_multipart()
        try:
            try:
                transfer = self.active[address]
            except KeyError:
                transfer = self.new_transfer(msg, *args)
                self.active[address] = transfer
            else:
                self.current_transfer(transfer, msg, *args)
        except TransferDone as exc:
            self.logger.info(str(exc))
            del self.active[address]
            self.complete[transfer.slave_id] = transfer
            queue.send_multipart([address, b'DONE'])
        except TransferIgnoreChunk as exc:
            self.logger.debug(str(exc))
        except TransferError as exc:
            self.logger.error(str(exc))
            # XXX Delete the transfer object?
            # XXX Remove transfer from slave?
        else:
            fetch_range = transfer.fetch()
            while fetch_range:
                queue.send_multipart([
                    address, b'FETCH',
                    str(fetch_range.start).encode('ascii'),
                    str(len(fetch_range)).encode('ascii')
                ])
                fetch_range = transfer.fetch()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号