python多线程在python中完成多线程编程

python多线程在python中完成多线程编程

ID:31839669

大小:143.56 KB

页数:6页

时间:2019-01-20

python多线程在python中完成多线程编程_第1页
python多线程在python中完成多线程编程_第2页
python多线程在python中完成多线程编程_第3页
python多线程在python中完成多线程编程_第4页
python多线程在python中完成多线程编程_第5页
资源描述:

《python多线程在python中完成多线程编程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、python多线程:在Python中完成线程编程疯狂代码http://www.crazycoder.cn/ĵ:http:/www.crazycoder.cn/Linux/Article27109.html通过将线程和队列结合在起可以轻松地在Python中完成线程编程本文将研究同时使用线程和队列创建些简单但有效模式以解决需要并发处理问题对于Python来说并不缺少并发选项其标准库中包括了对线程、进程和异步I/O支持在许多情况下通过创建诸如异步、线程和子进程的类高层模块Python简化了各种并发思路

2、方法使用除了标准库的外还有些第3方解决方案例如Twisted、Stackless和进程模块本文重点关注于使用Python线程并使用了些实际举例进行介绍说明虽然有许多很好联机资源详细介绍说明了线程API但本文尝试提供些实际举例以介绍说明些常见线程使用模式首先弄清进程和线程的间区别这点是非常重要线程和进程区别的处在于它们共享状态、内存和资源对于线程来说这个简单区别既是它优势又是它缺点方面线程是轻量级并且相互的间易于通信但另方面它们也带来了包括死锁、争用条件和高复杂性在内各种问题幸运是由于GIL和队列

3、模块和采用其他语言相比采用Python语言在线程实现复杂性上要低得多使用Python线程要继续学习本文中内容我假定您已经安装了Python2.5或者更高版本本文中许多举例都将使用Python语言新特性而这些特性仅出现于Python2.5的后要开始使用Python语言线程我们将从简单"HelloWorld"举例开始:hello_threads_exampleimportthreadingimportdatetimeThreadClass(threading.Thread):defrun(self)

4、:now=datetime.datetime.nowpr"%ssaysHelloWorldattime:%s"%(self.getName,now)foriinrange(2):t=ThreadClasst.start如果运行这个举例您将得到下面输出:#pythonhello_threads.pyThread-1saysHelloWorldattime:2008-05-1313:22:50.252069Thread-2saysHelloWorldattime:2008-05-1313:22:50

5、.252576仔细观察输出结果您可以看到从两个线程都输出了HelloWorld语句并都带有日期戳如果分析实际代码那么将发现其中包含两个导入语句;个语句导入了日期时间模块另个语句导入线程模块类ThreadClass继承自threading.Thread也正如此您需要定义个run思路方法以此执行您在该线程中要运行代码在这个run思路方法中唯要注意是self.getName()是个用于确定该线程名称思路方法最后3行代码实际地该类并启动线程如果注意话那么会发现实际启动线程是t.start()在设计线程模

6、块时考虑到了继承并且线程模块实际上是建立在底层线程模块基础的上对于大多数情况来说从threading.Thread进行继承是种最佳实战它创建了用于线程编程常规API.使用线程队列如前所述当多个线程需要共享数据或者资源时候可能会使得线程使用变得复杂线程模块提供了许多同步原语包括信号量、条件变量、事件和锁当这些选项存在时最佳实战是转而关注于使用队列相比较而言队列更容易处理并且可以使得线程编程更加安全它们能够有效地传送单个线程对资源所有访问并支持更加清晰、可读性更强设计模式在下个举例中您将首先创建个以

7、串行方式或者依次执行获取网站WebSiteURL并显示页面前1024个字节有时使用线程可以更快地完成任务下面就是个典型举例首先让我们使用urllib2模块以获取这些页面(次获取个页面)并且对代码运行时间进行计时:URL获取序列importurllib2importtimehosts=["http://yahoo.com","http://google.com","http://amazon.com","http://ibm.com","http://apple.com"]start=time.t

8、ime#grabsurlsofhostsandprsfirst1024sofpageforhostinhosts:url=urllib2.urlopen(host)prurl.read(1024)pr"ElapsedTime:%s"%(time.time-start)在运行以上举例时您将在标准输出中获得大量输出结果但最后您将得到以下内容:ElapsedTime:2.40353488922让我们仔细分析这段代码您仅导入了两个模块首先urllib2模块减少了工作复杂程度并且获取了Web页面然后通过t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。