#!/usr/bin/env python # encoding: utf-8 """ AsyncObject.py Created by Cody Brocious on 2007-04-26. Copyright (c) 2007 Cody Brocious All rights reserved. """ import os, socket, struct, sys try: import cPickle as pickle except: import pickle import AsyncProxy class AsyncObject(object): @classmethod def new(cls, *args, **kwargs): sock = socket.socketpair()[1] proxy = AsyncProxy.AsyncProxy(sock) if os.fork() == 0: self = cls(*args, **kwargs) self.run(sock, proxy) sys.exit(0) else: return proxy def run(self, sock, proxy): while True: data = sock.recv(4) if len(data) != 4: break datalen = struct.unpack('L', data)[0] data = sock.recv(datalen) func, args, kwargs, callback = pickle.loads(data) if func == 'get' or func == 'new': continue func = getattr(self, func) ret = func(*args, **kwargs) if callback != None: getattr(proxy, callback)(ret, callback=None)