建设部网站 自住房,建筑招投标网官网,wordpress获取用户的评论,网站做快捷方式之前也写了一些简单的Python程序#xff0c;对于多线程的并发一直没有涉及#xff0c;今天决定先突破一下#xff0c;把这个部分的内容先快速的掌握#xff0c;然后在这个基础上细化改进。我的好友冰川擅长Python技术#xff0c;所以就拿来主义#xff0c;参考了他的文章…之前也写了一些简单的Python程序对于多线程的并发一直没有涉及今天决定先突破一下把这个部分的内容先快速的掌握然后在这个基础上细化改进。我的好友冰川擅长Python技术所以就拿来主义参考了他的文章。Python的程序性能一直受到诟病但是功能扩展性上还是具有很大的优势程序中有一部分的概念就是并发多线程相关的所以我们也算是大跃进一下。说到Python的性能GIL是需要了解的这是一个全局解释器锁保证在同一时刻只有一个线程在运行在保证线程安全的同时性能上会受到一定的影响。我们简单来做一个案例在上面的文章中已经有了我们简单改一下。测试一把。首先要准备一个文件urls.txt比如我的技术博客我随便选择了两篇文章的下标然后就可以循环生成一大批的urls.txt内容来。for i in {2101076..2148323}doecho http://blog.itpub.net/23718752/viewspace-$idone要测试url的信息我们需要引入一个模块requests,通过发送请求来得到反馈的结果如果是在200,300这样的状态值就说明是可访问的否则就是不可方案问。需要注意的地方或者是一些小技巧我们可以使用strip()来得到一个串 http://www.jeanron100.com.strip()http://www.jeanron100.com然后使用requests.get方法来得到结果值 requests.get(http://www.baidu.com)最终的状态值可以使用status_code属性来得到。 requests.get(http://www.baidu.com).status_code200明白了这些要点Python程序就会容易很多。直接附上源程序#!/usr/bin/evn pythonimport requestsimport timedef get_site_code(url):r requests.get(url)status r.status_codeline url str(status)with open(/tmp/site_stauts.txt, a) as f:f.writelines(line \n)if __name__ __main__:print starting at:, time.ctime()for url in open(urls.txt):url url.strip()get_site_code(url)print Done at:, time.ctime()整个过程大概耗时37秒钟,urls大概是30多个。# python a.plstarting at: Wed Dec 6 07:00:34 2017Done at: Wed Dec 6 07:01:11 2017我们再来看看多线程的部分毫无疑问我们需要一个线程相关的模块在这里就是threading我们可以直接开启多个线程不做线程的粒度控制比如现在有30个请求直接就是30个线程暂时没有做成线程池的那种模式初始化的时候可以使用如下的方式来初始化线程。threading.Thread(targetget_site_code, args(url,))使用start方法启动线程threads[i].start()如果一个线程在执行过程中要调用另外一个线程需要等到它完成以后才能接着执行在这里就是join方法。threads[i].join()源程序如下#!/usr/bin/evn pythonimport requestsimport timeimport threadingdef get_site_code(url):r requests.get(url)status r.status_codeline url str(status)with open(/tmp/site_stauts.txt, a) as f:f.writelines(line \n)if __name__ __main__:print starting at:, time.ctime()threads []for url in open(urls.txt):url url.strip()t threading.Thread(targetget_site_code, args(url,))threads.append(t)for i in range(len(threads)):threads[i].start()for i in range(len(threads)):threads[i].join()print Done at:, time.ctime()使用了多线程之后耗时大概是3秒钟提高了10多倍收益还是很大的。# python b.plstarting at: Wed Dec 6 07:24:36 2017Done at: Wed Dec 6 07:24:39 2017随后会考虑从其他的角度来持续的改进改进的空间依旧很大。个人微信公众号欢迎扫码关注。