# coding=utf-8from concurrent.futures import ThreadPoolExecutor
import time
deff():print'thread start'
time.sleep(4)print'thread end'return'xxx'if __name__ =='__main__':
executor = ThreadPoolExecutor()
result = executor.submit(f,)print'future', result.result()
map 方法
提交多个任务
def map(self, fn, *iterables, **kwargs):
# coding=utf-8from concurrent.futures import ThreadPoolExecutor
import time
deff(t):print'thread start %s'% t
time.sleep(2)print'thread end %s'% t
return t
if __name__ =='__main__':
executor = ThreadPoolExecutor(4)
result = executor.map(f,[1,2,3,4])
executor.shutdown()# 线程等待,等待子线程结束print result # 返回生成器对象generator
callback 回调函数
回调函数有一个参数,future,可以在回调函数里使用future的结果
# coding=utf-8from concurrent.futures import ThreadPoolExecutor
import time
deffoo():print'thread start'
time.sleep(4)return'xx'defsave(f):print f
print f.result()print'save'if __name__ =='__main__':
pool = ThreadPoolExecutor()for i inrange(4):
result = pool.submit(foo)
result.add_done_callback(save)
ProcessPoolExecutor
submit 方法
# coding=utf-8from concurrent.futures import ProcessPoolExecutor
import time
deff(name):print name
time.sleep(2)return'xx'if __name__ =='__main__':
executor = ProcessPoolExecutor()
result = executor.submit(f,'who are you?')print result # Future实例化的对象whilenot result.done():passelse:print result.result()
map 方法
# coding=utf-8from concurrent.futures import ProcessPoolExecutor
import time
deffoo(x, y):print x, y
time.sleep(2)return x, y
if __name__ =='__main__':
pool = ProcessPoolExecutor()
results = pool.map(foo,(1,2,3),(4,5,6))print results # <generator object result_iterator at 0x0000000002FF65E8>for item in results:# 内部调用 result()方法进入阻塞,等待进程返回结果print item