图书排名查询——python多线程编程应用
来源:互联网 发布:lol解说jy淘宝店 编辑:程序博客网 时间:2024/06/06 03:15
python多线程编程特别适用于完成相互独立的任务,同时进行,相互之间没有依赖性。比如,下面我们介绍的从网站中查询每本书的排名这个任务,就非常适合应用多线程来提升效率。
1 理论分析
- 单线程情况下,查询n本书的排名,需要执行n次排名查询。
- 多线程情况下,同时对每一本书的排名进行查询,无需顺序执行。
2 代码实现
2.1 单线程的代码实现bookrank.py
#!/usr/bin/env python# coding=utf-8# import pdbfrom atexit import registerfrom re import compilefrom threading import Threadfrom time import ctimefrom urllib2 import urlopen as uopenREGEX = compile('#([\d,]+) in Books')AMZN = 'http://amazon.com/dp/'ISBNs = { '0132269937':'Core Python Programming', '0132356139':'Python web Development with Djanjo', '0137143419':'Python Fundamentals',}def getRanking(isbn): page = uopen('%s%s' % (AMZN,isbn)) data = page.read() page.close() return REGEX.findall(data)[0]def _showRanking(isbn): print '- %r ranked %s' %(ISBNs[isbn],getRanking(isbn))def main(): print 'At', ctime(), 'On Amazon...'# pdb.set_trace() for isbn in ISBNs: _showRanking(isbn)@registerdef _atexit(): print 'ALL DONE at:', ctime()if __name__ == '__main__': main()
运行结果分析:
单线程用时20s。
2.2 多线程的代码实现 bookrank_mts.py
#!/usr/bin/env python# coding=utf-8# import pdbfrom atexit import registerfrom re import compilefrom threading import Threadfrom time import ctimefrom urllib2 import urlopen as uopenREGEX = compile('#([\d,]+) in Books')AMZN = 'http://amazon.com/dp/'ISBNs = { '0132269937':'Core Python Programming', '0132356139':'Python web Development with Djanjo', '0137143419':'Python Fundamentals',}def getRanking(isbn): page = uopen('%s%s' % (AMZN,isbn)) data = page.read() page.close() return REGEX.findall(data)[0]def _showRanking(isbn): print '- %r ranked %s' %(ISBNs[isbn],getRanking(isbn))def main(): print 'At', ctime(), 'On Amazon...'# pdb.set_trace() for isbn in ISBNs: Thread(target=_showRanking, args=(isbn,)).start()@registerdef _atexit(): print 'ALL DONE at:', ctime()if __name__ == '__main__': main()
多线程用时6s。
3 结果分析
分析结果,我们会发现,对于这种多任务不具关联性的情况,采用多线程会明显节省时间,效率大大提高,我们仅仅举了一个查询3本书的排名就省了十几秒,如果要查更多的书,效果会更明显。
阅读全文
0 0
- 图书排名查询——python多线程编程应用
- python简单爬虫(下):实战应用——抓取豆瓣同城、登陆图书馆查询图书归还
- 集体智慧编程——搜索与排名-Python实现
- 平院微信图书馆——中转图书查询
- python多线程编程——《python核心编程第四章》
- python学习笔记——多线程编程
- python学习笔记——多线程编程
- python的多线程编程——锁
- python多线程编程—创建线程
- python 网络爬虫——爬取小米应用商店排名前100App
- python核心编程(十五)— 多线程编程
- json数组实现图书管理系统——图书管理、查询、前台分页功能
- SQL—排名函数的应用
- 图书查询
- python多线程在socket编程中的应用(代码范例)
- 条件变量 condition 在 python 多线程编程中的应用
- 图书封面的故事之“阿尔特温人”——选自《Erlang/OTP并发编程实战》图书封面
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—多线程查询数据库记录
- Hive作业优化
- 千寻APP 设计参考
- thinkphp5 项目笔记
- java语言基础(60)——java正则表达式基础使用
- C++操作符替代名
- 图书排名查询——python多线程编程应用
- Android 获取设备IP,已连接WiFi信息;(Android API-23: InetAddressUtils 替换)
- SpringBoot开发详解(十) -- 使用JPA访问数据库下篇及使用Page进行数据分页
- Java的重载(overload)和覆盖(override)
- c++ 中 pair 的 使用方法
- 书摘——《暗时间》
- 线程的简单解析
- 解决 maven 更新jar很慢(idea、eclipse)
- 《Web接口开发与自动化测试基于Python语言》--第2章