一个无线程并行获取url资源的简单接口

pyparallelcurl的Python项目详细描述


此模块提供了一个易于使用的界面,允许您运行多个curl url获取 在python中并行,没有线程。

要测试它,请转到命令行,将CD转到该文件夹并运行

/test.py

这将通过google的api运行100次搜索,并打印结果。看看是什么样的 运行并行请求会产生性能差异,请尝试更改10个请求的默认值 使用可选脚本参数并行运行,并计时每次运行所需的时间:

时间/测试.py 1 时间./test.py 20

第一个只允许一次运行一个请求,序列化调用。我看到这件事发生了 100秒。第二次跑步一次有20次在飞,需要11秒!不过要注意, 如果你同时发出太多的请求,有可能会压倒你的目标。你可能会结束 你的IP被禁止访问服务器,或者达到其他API限制。

这个类的目的是使并行运行多个curl请求变得容易,而不是 在开始下一个之前等待每个任务完成。在引擎盖下使用curl_multi_exec 但由于我发现这个接口令人费解,所以我想要一个与任务对应的接口 我想逃跑。

要使用它,请轻松安装pycurl,导入pyparallelcurl,然后创建parallelcurl对象:

平行卷曲=平行卷曲(10)

构造函数的第一个参数是允许的未完成获取的最大数目 在阻塞等待一个完成之前。稍后可以使用setmaxrequests()更改此设置 第二个可选参数是curl\setopt\u array()使用格式的curl选项数组

接下来,启动url获取:

parallelcurl.startrequest('http://example.com',在请求完成时,{'somekey':'somevalue'})

第一个参数是应该获取的地址 第二个是回调函数,该函数将在请求完成后运行 第三个是“cookie”,它可以包含传递给回调的任意数据

此调用将立即返回,只要小于 请求未完成。请求完成后,将调用回调函数,例如:

按请求完成(内容,http://example.com,ch,{somekey':'somevalue'})

回调应该有四个参数。第一个字符串包含在 网址。第二个是请求的原始url,第三个是请求的curl句柄 可以查询以获取结果,第四个是任意的“cookie”值 与此对象关联。此cookie包含用户定义的数据。

由于脚本末尾可能有未完成的请求,因此必须调用

parallelcurl.finishallrequests()

在你离开之前。如果不这样做,最终的请求可能会被保留下来!这实际上也是 在类的析构函数中调用,但明确地调用它绝对是最佳实践。

由Pete Warden提供,可自由重复使用,请参见http://petewarden.typepad.com了解更多信息

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

推荐PyPI第三方库


热门话题
C++/爪哇/C图像处理库   由于类org的许多实例而导致java内存泄漏。jboss。vfs。spi。JavaZipFileSystem   java在Android中使用CustomMultiPartEntity取消上传文件   java根据另一个JCombobox填充JCombobox值   安卓 java,如何将Unicode字符更改为普通字符?   java每次出现“CCTGG”时,我为DNA序列创建的字符串生成器都会停止   java Android NDK应用程序抛出错误未满足链接错误   用Java实现mp3音频分解   如何在源java中使用weka 3.7.12中保存的svm(wlsvm)模型类   jsf Spring@Autowired(required=true)为空   java如何使用jackson的mixin映射复杂类型?   java根据URL服务器名称加载不同的ApplicationContext   sql使用Java从Oracle获取表名?   ClientResponseFilter中的java注入EJB   java无法根据其大小定位安卓 popupwindow(安卓 API8)   Java中的鼠标悬停弹出窗口   java Hibernate:加入标准   java如何更改(数据库)变量中的jspinner日期最小值和最大值?