线程使用
来源:互联网 发布:pe pvdc 知乎 保鲜膜 编辑:程序博客网 时间:2024/05/20 05:07
建议不要用thread模块,而应该使用threading和Queue模块等
threading模块 确保所有“重要的”子线程都退出后,进程才会结束
threading模块支持守护线程,如果你的主线程要退出的时候,不用等待那些子线程完成,那就设定这些线程的daemon属性,即在线程开始之前,调用setDaemon()函数设定线程的daemon标志,表示这个线程“不重要”
#!/usr/bin/env pythonimport threadingfrom time import ctimeclass myThread(threading.Thread): def __init__(self, func, args, name = ''): threading.Thread.__init__(self) self.name = name self.func = func self.args = args def getResult(self): return self.res def run(self): print 'starting', self.name, 'at: ', ctime() self.res = self.func(*self.args) print 'self.name', 'finished at: ', ctime()
#!/usr/bin/env pythonfrom myThread import myThreadfrom time import ctime, sleepdef fib(x): sleep(0.005) if x < 2: return 1 return (fib(x-2) + fib(x-1))def fac(x): sleep(0.1) if x < 2: return 1 return (x * fac(x-1))def sum(x): sleep(0.1) if x < 2: return 1 return (x + sum(x-1))funcs = [fib, fac, sum]n = 12def main(): nfuncs = range(len(funcs)) print '*** SINGLE THREAD' for i in nfuncs: print 'starting', funcs[i].__name__, 'at: ', ctime() print funcs[i](n) print funcs[i].__name__, 'finished at: ', ctime() print '/n*** MULTIPLE THREADS' threads = [] for i in nfuncs: t = MyThread(funcs[i], (n, ), funcs[i].__name__) threads.append(t) for i in nfuncs: threads[i].start() for i in nfuncs: threads[i].join() print threads[i].getResult() print 'all DONE'if __name__ == '__main__': main()
#!/usr/bin/env pythonfrom random import randintfrom time import sleepfrom Queue import Queuefrom myThread import MyThreaddef writeQ(queue): print 'producing object for Q...' queue.put('xxx', 1) print 'size now', queue.qsize()def readQ(queue): val = queue.get(1) print 'consumed object from Q... size now', queue.qsize()def writer(queue, loops): for i in range(loops): writeQ(queue) sleep(randint(1, 3))def reader(queue, loops): for i in range(loops): readQ(queue) sleep(randint(2, 5))funcs = [writer, reader]nfuncs = range(len(funcs))def main(): nloops = randint(2, 5) q = Queue(32) threads = [] for i in nfuncs: t = MyThread(funcs[i], (q, nloops), funcs[i].__name__) threads.append(t) for i in nfuncs: threads[i].start() for i in nfuncs: threads[i].join() print 'all DONE'if __name__ == '__main__': main()
- 使用线程
- 使用线程
- 使用线程
- 线程使用
- 使用线程
- 线程使用
- 线程使用
- 线程使用
- 使用线程和线程池
- 使用Swing Worker线程
- 如何使用线程
- 使用Event同步线程
- 如何使用线程
- 如何使用线程
- C# 线程使用
- 线程的使用
- 线程的使用步骤
- 使用线程创建form
- oracle存储过程大数据量insert
- Conversion Operators
- svnnotify配置
- 如何删除一个表中重复的记录? 、、游标,存储过程的使用
- 【转】Android JNI 知识简介
- 线程使用
- 实战试用 Android NDK 初见成效
- 【思考】何去何从
- perl正则表达式实现大写字母转小写字母
- 1
- 看书了
- 新的起点
- S3C2440中断寄存器
- vimrc的配置 超好用(详细注释)