Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建非阻塞函数?_Python_Tornado - Fatal编程技术网

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