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

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 Android中比较字符串   java Month二月在下面的程序中被解析为'33'。如何修复?   用于在方法调用中显式指定泛型参数的Javasyntax   java 安卓。操作系统。NetworkOnMainThread尝试与jsoup 安卓连接时出现异常   java Spring引导找不到jsp视图   java如何访问注释中的属性值?   反射我可以使用isAssignableFrom检查C1是Java中C2的子类型吗?   java如何在selenium中从HTTP服务器传递图像URL   java导入失败。hibernate中的sql   Java中的“断开”while循环   java如何向Spark数据集添加映射列?   java应该在中部署消息驱动bean。耳文件?   java为何如此悲观。在springboot JPA中写入不起作用?   web服务如何在Java中高效地管理文件系统上的文件?   Java验证日期条目   java错误:在AWS RDS上找不到适合数据库的驱动程序   java如何将OBJ文件面定义传递给openGL