concurrent.future module provides a high-level interface for asynchronously executing callables.

Basic Format:

from concurrent.future import ThreadPoolExecuor,ProcessPoolExecutor

executor = ThreadPoolExecutor(max_workers=2)  #max_workers 为池中允许的线程数

executor = ProcessPoolExecutor(max_workers=2)

obj1 = executor.submit(function, arg1, arg2)  #提交子线程
obj2 = executor.map(func,iterator)    #异步运行的map

executor.shutdown(wait=True)   # 类似于pool.close()  pool.join()  等待所有子进程/线程运行完结果  当wait = False的时候结果会立刻返回,但pool依然会等到所有结果都得到后才会释放

obj1.result()
obj2.result() #拿到结果 # ThreadPoolExecuor,ProcessPoolExecutor都可以采用with statement with ThreadPoolExecutor(max_workers=1) as executor: obj1 = executor.submit(function, arg1, arg2) #提交子线程 obj2 = executor.map(func,iterator) #异步运行的map

 

Others:

  •   obj.exception(timeout=second)   

  在second内如果没有结果就报错。 如果timeout=None 就相当于obj.join()无限制等待obj结束

  •   obj.add_done_callback(func)  

  将obj返回给func函数,由于返回的obj,所以func函数内需要obj.result()

  •   obj.cancel()

  如果被执行了,就返回false,如果在执行可以被cancel 就返回true

  •   obj.cancelled

  如果被cancel成功了就返回true

  •   done()

  没有在执行就返回true(被cancel或者运行完毕)

 

 

exmaples:

def wait_on_future():
    f = executor.submit(pow, 5, 2)
    # This will never complete because there is only one worker thread and
    # it is executing this function.
    print(f.result())

executor = ThreadPoolExecutor(max_workers=1)
executor.submit(wait_on_future)

 

 

reference:  http://pythonhosted.org/futures/