当前位置: 网学 > 编程文档 > 其他类别 > 正文

Python多线程学习

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/08/01

以下是网学网为您推荐的其他类别-Python多线程学习,希望本篇文章对您学习有所帮助。

一、Python中的线程使用:  Python中使用线程有两种方式:函数或者用类来包装线程对象。  1、  函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:  view plaincopy to clipboardprint?  import time import thread def timer(no, interval):cnt = 0 while cnt<10:print 'Thread:(%d) Time:%s'%(no, time.ctime())  time.sleep(interval)  cnt+=1 thread.exit_thread()  def test(): #Use thread.start_new_thread() to create 2 new threads thread.start_new_thread(timer, (1,1))  thread.start_new_thread(timer, (2,2))  if __name__=='__main__':test()  上面的例子定义了一个线程函数timer,它打印出10条时间记录后退出,每次打印的间隔由interval参数决定。thread.start_new_thread(function, args[, kwargs])的第一个参数是线程函数(本例中的timer方法),第二个参数是传递给线程函数的参数,它必须是tuple类型,kwargs是可选参数。  线程的结束可以等待线程自然结束,也可以在线程函数中调用thread.exit()或thread.exit_thread()方法。  2、  创建threading.Thread的子类来包装一个线程对象,如下例:  view plaincopy to clipboardprint?  import threading import time class timer(threading.Thread): #The timer class is derived from the class threading.Thread def __init__(self, num, interval):threading.Thread.__init__(self)  self.thread_num = num self.interval = interval self.thread_stop = False  def run(self): #Overwrite run() method, put what you want the thread do here while not self.thread_stop:print 'Thread Object(%d), Time:%s' %(self.thread_num, time.ctime())  time.sleep(self.interval)  def stop(self):self.thread_stop = True  def test():thread1 = timer(1, 1)  thread2 = timer(2, 2)  thread1.start()  thread2.start()  time.sleep(10)  thread1.stop()  thread2.stop()  return  if __name__ == '__main__':test()  就我个人而言,比较喜欢第二种方式,即创建自己的线程类,必要时重写threading.Thread类的方法,线程的控制可以由自己定制。  threading.Thread类的使用:  1,在自己的线程类的__init__里调用threading.Thread.__init__(self, name = threadname)  Threadname为线程的名字  2, run(),通常需要重写,编写代码实现做需要的功能。  3,getName(),获得线程对象名称  4,setName(),设置线程对象名称  5,start(),启动线程  6,jion([timeout]),等待另一线程结束后再运行。  7,setDaemon(bool),设置子线程是否随主线程一起结束,必须在start()之前调用。默认为False.  8,isDaemon(),判断线程是否随主线程一起结束。  9,isAlive(),检查线程是否在运行中。  此外threading模块本身也提供了很多方法和其他的类,可以帮助我们更好的使用和管理线程。可以参看http://www.python.org/doc/2.5.2/lib/module-threading.html.  假设两个线程对象t1和t2都要对num=0进行增1运算,t1和t2都各对num修改10次,num的最终的结果应该为20.但是由于是多线程访问,有可能出现下面情况:在num=0时,t1取得num=0.系统此时把t1调度为“sleeping”状态,把t2转换为“running”状态,t2页获得num=0.然后t2对得到的值进行加1并赋给num,使得num=1.
  • 上一篇资讯: 深度浅析Python开发过程
  • 下一篇资讯: Python全文搜索引擎 Hypy
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号