异步代码的魔术装饰语法。

tomorrow的Python项目详细描述


python中异步代码的magic decorator语法

安装

明天可以通过pip方便地获得:

pip install tomorrow

或通过git clonesetup.py安装

git clone git@github.com:madisonmay/Tomorrow.git
sudo python setup.py install

用法

明日图书馆使您能够利用 多线程,很少考虑实现细节。

在幕后,库是围绕^{tt3}的薄包装$ 在concurrent.futures中解析Future的对象 您尝试访问它的任何属性。

足够多的实现细节,让我们看看它有多简单 就是用最少的 努力。

天真的刮网器

您已经收集了一个url列表,并希望下载 很多。以下是一个非常合理的解决方案 任务。

对于下面的例子,我们将使用来自alexa的顶级站点 排名。

urls=['http://google.com','http://facebook.com','http://youtube.com','http://baidu.com','http://yahoo.com',]

那么,让我们开始代码。

importtimeimportrequestsdefdownload(url):returnrequests.get(url)if__name__=="__main__":start=time.time()responses=[download(url)forurlinurls]html=[response.textforresponseinresponses]end=time.time()print"Time: %f seconds"%(end-start)

更高效的刮网器

使用明天的decorator语法,我们可以定义一个函数 在多个线程中执行。对download的单独调用是 无阻塞,但我们可以忽略这个事实并编写代码 与我们在同步范式中的情况完全相同。

importtimeimportrequestsfromtomorrowimportthreads@threads(5)defdownload(url):returnrequests.get(url)if__name__=="__main__":importtimestart=time.time()responses=[download(url)forurlinurls]html=[response.textforresponseinresponses]end=time.time()print"Time: %f seconds"%(end-start)

太棒了!只有一行额外的代码(没有显式的 线程逻辑)我们现在可以高效地下载约10倍的网站。

您还可以选择传入一个超时参数,以防止挂起 在不能保证返回的任务上。

importtimefromtomorrowimportthreads@threads(1,timeout=0.1)defraises_timeout_error():time.sleep(1)if__name__=="__main__":printraises_timeout_error()

它是如何工作的?

请随意阅读源代码,以便在幕后窥探一番,这是不太重要的 那50行代码。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有字符串的java JNA调用与带有字节[]的java JNA调用的行为不同   java基于键列表获取子映射   重启后永久增加java堆大小?   JavaHTTPS服务器:相互SSL身份验证   java为什么接受接口的方法会拒绝该接口的实现?   片段中的java视图无法应用于()   ms access Java SQL更新命令不工作   java将web服务自动打包和部署到Oracle Application Server 10g   java有没有办法在安卓 studio中为安卓时钟设置多个警报?   位于FTP服务器上的文件上的Java校验和md5   在Java中创建类时遇到问题。有些方法不太确定   java错误:在类chrome\u驱动程序中找不到主方法   通用海图(Javascript\Java)