繁体   English   中英

如何创建一个非阻塞功能?

[英]How to create a non-blocking function?

我是龙卷风的新手。

协程的一部分令人兴奋。

因此,我首先尝试将阻止功能转换为非阻止功能。

@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_future不会使函数成为非阻塞函数; 它采用了使用回调的非阻塞函数,并使它易于协程。

使阻塞函数不进行阻塞而不进行深层更改的唯一方法是在另一个线程或进程中运行它,就像使用ThreadPoolExecutor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM