起因,我用多线程去用访问elasticsearch api时候,想拿到es返回的search结果。 默认python threading是不能获取返回的结果的。
有这么几种方式可以取到多线程执行后的结果 .
1. 使用Queue队列的方式.
2. 使用共享变量的问题
我们知道multiprocessing Process是可以返回每个调用的结果,在multiprocessing下也有个多线程模块,通过async_result.get()可以获取结果。好奇ThreadPool是如何实现的?或者说multiprocessing是如何实现的多线程.
python有两个多线程的入口,一个是 dummy Pool 另一个是pool.ThreadPool
from multiprocessing.pool import ThreadPool
def foo(bar, baz):
print 'hello {0}'.format(bar)
return 'foo' + baz
pool = ThreadPool(processes=1)
async_result = pool.apply_async(foo, ('xiaorui.cc', 'foo',))
#使用async_result.get可以取出结果.
return_val = async_result.get()
下面我们来看看
file:2.7/lib/python2.7/multiprocessing/pool.py
# blog: http://xiaorui.cc
class ThreadPool(Pool):
from .dummy import Pr