python 多线程+queue
2017-07-07 23:35
12 查看
python的queue设计的是线程安全的,所以大家伙放心用吧!
python多线程的一种简单的实现如下:
程序执行结果如下
使用threading可以很容易的开启多线程,join的作用是用于线程同步,看自己的需求而定。
好了,现在进入正题,多线程+queue怎么弄,先给出代码
结果如下
是不是感觉很乱,哈哈没关系,这才是多线程的魅力所在!你永远不知道是从哪个线程开始。
在这里Queue作为资源池,线程去从资源池中取数据进行处理,可是为什么需要用到Queue呢, 因为可能资源池很大,而开的线程数有限,所以等一个线程处理完它的任务之后,它可以继续去取资源处理!这就可以让先执行完一个任务的线程不立即停下来,而是去取另一个资源处理,直到没有数据的时候它才会停下来。简单理解:q.task_done是表明当前的资源处理完了,q.join()会等到所有的资源都被处理了才会向下继续执行,这就是一种同步。
python多线程的一种简单的实现如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time def fun(argv): print 'in', argv time.sleep(2) threads = [] #用于保存线程 for i in range(5): #开5个线程 t = threading.Thread(target = fun, args = str(i)) threads.append(t) if __name__ == '__main__': #开始所有的线程 for i in threads: i.start() #保证线程执行完 for i in threads: i.join() print 'all over'
程序执行结果如下
使用threading可以很容易的开启多线程,join的作用是用于线程同步,看自己的需求而定。
好了,现在进入正题,多线程+queue怎么弄,先给出代码
#!/usr/bin/env python # -*- coding: utf-8 -*- import Queue import threading import time Thread_id = 1 Thread_num = 3 class myThread(threading.Thread): def __init__(self, q): global Thread_id threading.Thread.__init__(self) self.q = q self.Thread_id = Thread_id Thread_id = Thread_id + 1 def run(self): while True: try: task = self.q.get(block = True, timeout = 1) #不设置阻塞的话会一直去尝试获取资源 except Queue.Empty: print 'Thread' , self.Thread_id , 'end' break #取到数据,开始处理(依据需求加处理代码) print "Starting " , self.Thread_id print task self.q.task_done() print "Ending " , self.Thread_id q = Queue.Queue(10) #向资源池里面放10个数用作测试 for i in range(10): q.put(i) #开Thread_num个线程 for i in range(0, Thread_num): worker = myThread(q) worker.start() q.join() #等待所有的队列资源都用完 print "Exiting Main Thread"
结果如下
是不是感觉很乱,哈哈没关系,这才是多线程的魅力所在!你永远不知道是从哪个线程开始。
在这里Queue作为资源池,线程去从资源池中取数据进行处理,可是为什么需要用到Queue呢, 因为可能资源池很大,而开的线程数有限,所以等一个线程处理完它的任务之后,它可以继续去取资源处理!这就可以让先执行完一个任务的线程不立即停下来,而是去取另一个资源处理,直到没有数据的时候它才会停下来。简单理解:q.task_done是表明当前的资源处理完了,q.join()会等到所有的资源都被处理了才会向下继续执行,这就是一种同步。
相关文章推荐
- C++ Boost 之Python(生成一个扩展模块)
- Python指南--数据结构
- Python指南--数据结构
- 搭建Python的集成开发环境WingIDE
- Python指南--深入流程控制
- Python指南--深入流程控制
- 用Python实现数据库编程
- Python指南--开胃菜
- Python指南--开胃菜
- Python指南--初步认识Python
- Python指南--初步认识Python
- Python指南--前言
- Python指南--使用Python解释器
- Python指南--使用Python解释器
- Python指南--前言
- python库lxml在linux和WIN系统下的安装
- C++ Boost 之Python(一个简单的例子)
- C++ Boost 之Python(继承)
- C++ Boost 之Python(大纲)