Python 如何创建非阻塞函数?
我不熟悉龙卷风 这是一个令人兴奋的合作项目 因此,我首先尝试将阻塞函数转换为非阻塞函数Python 如何创建非阻塞函数?,python,tornado,Python,Tornado,我不熟悉龙卷风 这是一个令人兴奋的合作项目 因此,我首先尝试将阻塞函数转换为非阻塞函数 @tornado.concurrent.return_future def calculate(callback): start_time = time.time() res = urllib2.urlopen("https://www.google.com/") print time.time()-start_time callback(res) class MainHan
@tornado.concurrent.return_future
def calculate(callback):
start_time = time.time()
res = urllib2.urlopen("https://www.google.com/")
print time.time()-start_time
callback(res)
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self):
start_time = time.time()
res = yield [calculate(), calculate()]
print time.time()-start_time
但我得到了:
1.41436505318
1.38487792015
2.80179595947
它是受I/O限制的,所以我想总花费的时间应该接近较长的时间(1.41436505318)。
但它似乎被阻塞了
所以我想知道出了什么问题?如何将阻塞函数转换为非阻塞函数?
return\u future
不会使函数成为非阻塞函数;它采用了一个非阻塞函数,该函数使用回调并使其对协同路由友好
使阻塞函数非阻塞而不对其进行深入更改的唯一方法是在另一个线程或进程中运行它,如使用ThreadPoolExecutor