예제 #1
0
 def _writer():
     stdout = FileObjectPosix(read_fd, 'rb', bufsize=0, close=True)
     while True:
         data = stdout.read(buffer_size)
         if len(data) == 0:
             return
         sock.write(data)
예제 #2
0
 def _reader():
     f = FileObjectPosix(write_fd, 'wb', bufsize=0, close=True)
     while True:
         data = sock.recv(buffer_size)
         if len(data) == 0:
             return
         f.write(data)
예제 #3
0
    def _write_loop(self):
        f = FileObjectPosix(self._master_pipe[1], 'w', 0)

        while True:
            try:
                f.write(self._write_queue.get())
            except:
                self._alive = False
                break
예제 #4
0
파일: _socket3.py 프로젝트: wskplho/gevent
 def close(self):
     try:
         if self._sock:
             self.flush()
     finally:
         s = self._sock
         self._sock = None
         if s is not None:
             if self._close:
                 FileObjectPosix.close(self)
             else:
                 _do_reuse_or_drop(s, "_drop")
예제 #5
0
파일: _socket3.py 프로젝트: chengu/gevent
 def close(self):
     try:
         if self._sock:
             self.flush()
     finally:
         s = self._sock
         self._sock = None
         if s is not None:
             if self._close:
                 FileObjectPosix.close(self)
             else:
                 _do_reuse_or_drop(s, '_drop')
예제 #6
0
    def _read_loop(self):
        f = FileObjectPosix(self._master_pipe[0], 'r', 0)

        while True:
            try:
                data = f.read(2)
                size = struct.unpack('>h', data)[0]
                data = f.read(size)
                cmd, data = utils.unpack_message(data)
            except:
                # master is dead probably
                self._alive = False
                break
예제 #7
0
    def submit_with_download(self, task_name, args, sender, env=None):
        task_metadata = self.dispatcher.tasks[task_name]._get_metadata()
        schema = task_metadata['schema']
        url_list = []

        if schema is None:
            raise RpcException(
                errno.ENOENT,
                "Task {0} has no schema associated with it".format(task_name))

        for idx, arg in enumerate(schema):
            if arg.get('type') == 'fd':
                rfd, wfd = os.pipe()
                url_list.append("/dispatcher/filedownload?token={0}".format(
                    self.dispatcher.token_store.issue_token(
                        FileToken(user=sender.user,
                                  lifetime=60,
                                  direction='download',
                                  file=FileObjectPosix(rfd, 'rb', close=True),
                                  name=args[idx]))))
                args[idx] = FileDescriptor(wfd)
        task_id = self.submit(task_name, args, sender, env)
        return task_id, url_list
예제 #8
0
    def submit_with_upload(self, task_name, args, sender, env=None):
        task_metadata = self.dispatcher.tasks[task_name]._get_metadata()
        schema = task_metadata['schema']

        if schema is None:
            raise RpcException(
                errno.ENOENT,
                "Task {0} has no schema associated with it".format(task_name))
        upload_token_list = []
        for idx, arg in enumerate(schema):
            if arg.get('type') == 'fd':
                rfd, wfd = os.pipe()
                token = self.dispatcher.token_store.issue_token(
                    FileToken(user=sender.user,
                              lifetime=600,
                              direction='upload',
                              file=FileObjectPosix(wfd, 'wb', close=True),
                              name=str(uuid.uuid4()),
                              size=None))
                upload_token_list.append(token)
                args[idx] = FileDescriptor(rfd)
        task_id = self.submit(task_name, args, sender, env)
        return task_id, upload_token_list
예제 #9
0
파일: _socket3.py 프로젝트: wskplho/gevent
 def __init__(self, sock, mode="rb", bufsize=-1, close=False):
     _do_reuse_or_drop(sock, "_reuse")
     self._sock = sock
     FileObjectPosix.__init__(self, sock, mode, bufsize, close)
예제 #10
0
파일: _socket3.py 프로젝트: chengu/gevent
 def __init__(self, sock, mode='rb', bufsize=-1, close=False):
     _do_reuse_or_drop(sock, '_reuse')
     self._sock = sock
     FileObjectPosix.__init__(self, sock, mode, bufsize, close)