Welcome, guest | Sign In | My Account | Store | Cart
from threading import *
import copy

class Future:

   
def __init__(self,func,*param):
       
# Constructor
       
self.__done=0
       
self.__result=None
       
self.__status='working'

       
self.__C=Condition()   # Notify on this Condition when result is ready

       
# Run the actual function in a separate thread
       
self.__T=Thread(target=self.Wrapper,args=(func,param))
       
self.__T.setName("FutureThread")
       
self.__T.start()

   
def __repr__(self):
       
return '<Future at '+hex(id(self))+':'+self.__status+'>'

   
def __call__(self):
       
self.__C.acquire()
       
while self.__done==0:
           
self.__C.wait()
       
self.__C.release()
       
# We deepcopy __result to prevent accidental tampering with it.
        a
=copy.deepcopy(self.__result)
       
return a

   
def Wrapper(self, func, param):
       
# Run the actual function, and let us housekeep around it
       
self.__C.acquire()
       
try:
           
self.__result=func(*param)
       
except:
           
self.__result="Exception raised within Future"
       
self.__done=1
       
self.__status=`self.__result`
       
self.__C.notify()
       
self.__C.release()

History

  • revision 2 (22 years ago)
  • previous revisions are not available