コード例 #1
0
 def call(self, *args, **kwargs):
     try:
         return self.rc.call(REF, *args, **kwargs)
     except EVException:
         p = Promise()
         p._smash(EVException('Server currently unavailable.'))
         return p
コード例 #2
0
class Processround(object):
    def __init__(self, slaves, data, funcname, combinefunc):
        self.slaves = slaves
        self.data = data
        self.funcname = funcname
        self.combinefunc = combinefunc
        self.p = Promise()
        self.results = []

    def run(self):
        amount = len(self.data) / len(self.slaves)
        for i in range(len(self.slaves)):
            rp = self.slaves[i].call(
                self.funcname, self.data[i * amount:(i * amount) + amount])
            rp._when(self.resultcb)
            rp._except(self.exceptcb)

        return self.p

    def exceptcb(self, e):
        self.p._smash(e)

    def resultcb(self, result):
        self.results.append(result)
        if len(self.results) == len(self.slaves):
            self.p._resolve(self.combinefunc(self.results))
コード例 #3
0
ファイル: instashare.py プロジェクト: rep/pwrcall
class Filestreamer(object):
    def __init__(self, src, dst, conn):
        self.src, self.dst = src, dst
        self.conn = conn
        self.done = False
        self.p = Promise()
        self.count = 0
        self.burst = True

        conn.conn._on('writable', self.copy)
        conn.conn._on('close', self.closed)
        schedule(self.copy)

    def copyagain(self, r):
        self.burst = True
        schedule(self.copy)

    def copy(self):
        if self.done or self.conn.conn._closed: return
        if not self.burst: return
        self.count += 1

        d = self.src.read(16384)
        if not d:
            print 'EOF on src, sending close, local close, done'
            p2 = self.dst.call('close')

            def done(r):
                self.p._resolve(True)
                self.conn.close()

            p2._when(done)

            self.done = True
            self.src.close()
            return

        if self.count == 10:
            self.burst = False
            self.count = 0
            p = self.dst.call('write', d)
            p._when(self.copyagain)
        else:
            p = self.dst.notify('write', d)

    def closed(self, e):
        print 'connection closed', e
        if not self.done:
            self.p._smash('Closed, but not done, yet.')
コード例 #4
0
ファイル: instashare.py プロジェクト: rep/pwrcall
class Filestreamer(object):
	def __init__(self, src, dst, conn):
		self.src, self.dst = src, dst
		self.conn = conn
		self.done = False
		self.p = Promise()
		self.count = 0
		self.burst = True

		conn.conn._on('writable', self.copy)
		conn.conn._on('close', self.closed)
		schedule(self.copy)

	def copyagain(self, r):
		self.burst = True
		schedule(self.copy)

	def copy(self):
		if self.done or self.conn.conn._closed: return
		if not self.burst: return
		self.count += 1

		d = self.src.read(16384)
		if not d:
			print 'EOF on src, sending close, local close, done'
			p2 = self.dst.call('close')
			def done(r):
				self.p._resolve(True)
				self.conn.close()
			p2._when(done)

			self.done = True
			self.src.close()
			return

		if self.count == 10:
			self.burst = False
			self.count = 0
			p = self.dst.call('write', d)
			p._when(self.copyagain)
		else:
			p = self.dst.notify('write', d)

	def closed(self, e):
		print 'connection closed', e
		if not self.done:
			self.p._smash('Closed, but not done, yet.')
コード例 #5
0
ファイル: pwrmount.py プロジェクト: rep/pwrfs
	def call(self, *args, **kwargs):
		try: return self.rc.call(REF, *args, **kwargs)
		except EVException:
			p = Promise()
			p._smash(EVException('Server currently unavailable.'))
			return p