python threading和queue的例子
来源:互联网 发布:python 替换分隔符 编辑:程序博客网 时间:2024/06/05 08:18
建立一个生产者随机产生整数插入队列,建立两个消费者,一个不停地取奇数,另一个不停地取偶数。
原理:面向对象地抽象线程需要自定义一个类继承Thread类。比如自定义class MyThread(Thread)。这个类的一个实例就是代表了一个线程,然后通过重载这个类中的run方法(是run,不是start!!但start的动作确实就是调用run)来执行具体的操作。此时锁可以作为一个构造方法的参数,将一个锁传进不同的实例中以实现线程锁控制。
#!/usr/bin/env python3# -*- coding: utf-8 -*-' a test module '__author__ = 'Zhang Shuai'import queue, threadingimport random, timeclass Producter(threading.Thread): def __init__(self, t_name, queue): threading.Thread.__init__(self, name=t_name) self.queue = queue def run(self): for i in range(10): random_num = random.randint(1, 99) print("thread {} is running,time is {}, put {} in queue".format(self.getName(), time.ctime(), random_num)) self.queue.put(random_num) time.sleep(0.4) print("threading {} is finished".format(self.getName()))class consumer_odd(threading.Thread): def __init__(self, t_name, queue): threading.Thread.__init__(self, name=t_name) self.queue = queue def run(self): try: while 1: num = self.queue.get(1, 10) if num % 2 != 0: print("thread {} is running,time is {}, get {} from queue".format(self.getName(), time.ctime(), num)) else: self.queue.put(num) except Exception as e: print("threading {} is finished".format(self.getName()))class consumer_even(threading.Thread): def __init__(self, t_name, queue): threading.Thread.__init__(self, name=t_name) self.queue = queue def run(self): try: while 1: num = self.queue.get(1, 6) if num % 2 == 0: print("thread {} is running,time is {}, get {} from queue".format(self.getName(), time.ctime(), num)) else: self.queue.put(num) except Exception as e: print("threading {} is finished".format(self.getName()))def main(): q = queue.Queue() p = Producter("producter", q) o = consumer_odd("comuser_odd", q) e = consumer_even("consumer_even", q) p.start() o.start() e.start() p.join() e.join() o.join()if __name__ == '__main__': main() print("project is finished")
Thread类还有以下的一些方法,自定义的类也可以调用
- getName()
- setName(…) //其实Thread类在构造方法中有一个name参数,可以为相应的线程取一个名字。这两个方法就是相关这个名字属性的
isAlive() 一个线程从start()开始到run()结束的过程中没有异常,则其实alive的。
setDaemon(True/False) 是否设置一个线程为守护线程。当你设置一个线程为守护线程之后,程序不会等待这个线程结束再退出程序,可参考http://blog.csdn.net/u012063703/article/details/51601579
除了Thread类,threading中还有以下一些属性,简单介绍一下:
Timer类,Timer(int,target=func) 和Thread类类似,只不过它在int秒过后才以target指定的函数开始线程运行
currentThread() 获得当前线程对象
activeCount() 获得当前活动的线程总个数
enumerate() 获得所有活动线程的列表
settrace(func) 设置一跟踪函数,在run执行前执行
setprofile(func) 设置一跟踪函数,在run执行完毕之后执行
文章参考:http://www.cnblogs.com/franknihao/p/6627857.html
更 多 :http://www.cnblogs.com/tkqasn/p/5700281.html
- python threading和queue的例子
- python多线程使用例子threading + Queue
- python的threading模块中threading.RLock和threading.Lock
- python-利用queue和threading实现多线程下载
- Python多线程:thread、threading、queue
- Python学习之Threading, Queue
- 在python中实现生产者和消费者的例子(五):使用threading模块和全局变量
- python3.2 threading 和 queue
- Python中threading的join和setDaemon的区别及用法[例子]
- Python中threading的join和setDaemon的区别及用法[例子]
- Python中threading的join和setDaemon的区别及用法[例子]
- Python中threading的join和setDaemon的区别及用法[例子]
- Python中threading的join和setDaemon的区别及用法 例子
- python多线程模块thread,threading,Queue
- python的threading和multiprocessing模块初探
- python的threading和multiprocessing模块初探
- python的threading和multiprocessing模块初探
- python的thread和threading区别
- 一个前端攻城狮的全栈之路第六弹:nodejs、jade、mongodb、mongoose、七牛云实现列表的增、删、改
- 解决IntelliJ IDEA中文输入法下,输入提示框不跟随问题
- 大多数地方
- 通过spring实现javamail发送邮件功能
- 2017北大信科保研机试E
- python threading和queue的例子
- 可乐瓶的算法
- 关于opengl的一点感慨
- 16.3Sum Closest
- MySQL数据存储结构
- ThreadLocal笔记
- 常见app加固厂商脱壳方法研究
- C#对图片的操作
- StringUtils中 isNotEmpty 和isNotBlank的区别