加载中…
个人资料
麦兜搞IT
麦兜搞IT
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,532,476
  • 关注人气:531
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Python 多线程编程及同步处理(转)

(2011-08-03 08:25:31)
标签:

杂谈

分类: Python

http://blog.chinaunix.net/space.php?uid=25808509&do=blog&id=1991798

Python多线程编程,当程序需要同时并发处理多个任务时,就需要要使用多线程编程。继承线程类threading.thread,再重载成员函数run,程序处理的代码写在函数run中,最后再调用start()方法来运行线程,而join()方法可以用来等待线程结束。

多线程的资源同步,可使用thread.RLock()来创建资源锁,然后使用acquire()来锁住资源,release()来释放资源。等待事件用thread.Event(),用wait()来等待事件,set()来激发事件,clear()用于清除已激发事件。

另外可以用isAlive()来判断线程是否存活着。

  1. # 例:多线程编程
  2. import time # 导入时间模块
  3. import threading as thread # 导入线程模块
  4. class Thread1(thread.Thread):
  5. def __init__(self):
  6.         thread.Thread.__init__(self) # 默认初始化
  7.         self.lock = thread.RLock() # 创建资源锁
  8.         self.flag = True
  9.         self.count = 0
  10. def run(self):
  11. print 'Thread1 run'
  12. while self.count < 3:
  13.             self.lock.acquire() # 锁住资源
  14.             self.count += 1
  15. print self.count # 输出计数
  16.             self.lock.release() # 释放资源
  17.             time.sleep(1) # 线程休眠1秒
  18. print 'Thread1 end'
  19. class Thread2(thread.Thread):
  20. def __init__(self,event):
  21.         thread.Thread.__init__(self) # 初始化线程
  22.         self.event = event
  23. def run(self):
  24.         self.event.wait() # 线程启动后等待事件
  25. print 'Thread2 run'
  26.         self.event.clear() # 清除事件
  27. print 'Thread2 end'
  28. print 'program start'
  29. event = thread.Event()
  30. t1 = Thread1()
  31. t2 = Thread2(event)
  32. t1.start() # 线程t1启动
  33. t2.start() # 线程t2启动
  34. t1.join() # 等待线程t1结束
  35. event.set() # 激发事件t2开始运行
  36. t2.join() # 等待线程t2结束
  37. print 'program end' # 结束程序
  38. >> program start        # 输出
  39. >> Thread1 run
  40. >> 1
  41. >> 2
  42. >> 3
  43. >> Thread1 end
  44. >> Thread2 run
  45. >> Thread2 end
  46. >> program end

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有