18 多线程编程 - 《Python 核心编程》
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了18 多线程编程 - 《Python 核心编程》,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7842字,纯文字阅读大概需要12分钟。
内容图文
1 # !/usr/bin/env python 2 3 from time import sleep, ctime 4 5def loop0(): 6print‘start loop 0 at:‘, ctime() 7 sleep(4) 8print‘loop 0 done at:‘, ctime() 910def loop1(): 11print‘start loop 1 at:‘, ctime() 12 sleep(2) 13print‘loop 1 done at:‘, ctime() 1415def main(): 16print‘starting at:‘, ctime() 17 loop0() 18 loop1() 19print‘all DONE at:‘, ctime() 2021if__name__ == ‘__main__‘: 22 main()
1 # !/usr/bin/env python 2 3 import thread 4 from time import sleep, ctime 5 6def loop0(): 7print‘start loop 0 at:‘, ctime() 8 sleep(4) 9print‘loop 0 done at:‘, ctime() 1011def loop1(): 12print‘start loop 1 at:‘, ctime() 13 sleep(2) 14print‘loop 1 done at:‘, ctime() 1516def main(): 17print‘starting at:‘, ctime() 18 thread.start_new_thread(loop0, ()) 19 thread.start_new_thread(loop1, ()) 20 sleep(6) 21print‘all DONE at:‘, ctime() 2223if__name__ == ‘__main__‘: 24 main()
使用线程和锁 (mtsleep2.py)
1 # !/usr/bin/env python 2 3 import thread 4 from time import sleep, ctime 5 6 loops = [4,2] 7 8def loop(nloop, nsec, lock): 9print‘start loop‘, nloop, ‘at:‘, ctime() 10 sleep(nsec) 11print‘loop‘, nloop, ‘done at:‘, ctime() 12 lock.release() 1314def main(): 15print‘starting at:‘, ctime() 16 locks = [] 17 nloops = range(len(loops)) 1819for i in nloops: 20 lock = thread.allocate_lock() 21 lock.acquire() 22 locks.append(lock) 2324for i in nloops: 25 thread.start_new_thread(loop, (i, loops[i], locks[i])) 2627for i in nloops: 28while locks[i].locked(): pass2930print‘all DONE at:‘, ctime() 3132if__name__ == ‘__main__‘: 33 main()
18.5 threading 模块
1 # !/usr/bin/env python 2 3 import threading 4 from time import sleep, ctime 5 6 loops = [4,2] 7 8def loop(nloop, nsec): 9print‘start loop‘, nloop, ‘at:‘, ctime() 10 sleep(nsec) 11print‘loop‘, nloop, ‘done at:‘, ctime() 1213def main(): 14print‘starting at:‘, ctime() 15 threads = [] 16 nloops = range(len(loops)) 1718for i in nloops: 19 t = threading.Thread(target=loop,20 args=(i, loops[i])) 21 threads.append(t) 2223for i in nloops: # start threads24 threads[i].start() 2526for i in nloops: 27 threads[i].join() # threads to finish2829print‘all DONE at:‘, ctime() 3031if__name__ == ‘__main__‘: 32 main()
1 # !user/env/bin python 2 3 import threading 4 from time import sleep, ctime 5 6 loops = [4,2] 7 8class Thread4(threading.Thread): 9def__init__(self, nloop, nsec, 10 group=None, target=None, name=None,11 args=(), kwargs=None, verbose=None): 12 self.nloop = nloop 13 self.nsec = nsec 14 threading.Thread.__init__(self) 15def run(self): 16print‘start loop‘, self.nloop, ‘at:‘, ctime() 17 sleep(self.nsec) 18print‘loop‘, self.nloop, ‘done at:‘, ctime() 1920def main(): 21print‘starting at:‘, ctime() 22 threads = list() 23 nloops = range(len(loops)) 2425for i in nloops: 26 t = Thread4(i, loops[i]) 27 threads.append(t) 2829for i in nloops: 30 threads[i].start() 3132for i in nloops: 33 threads[i].join() 3435print‘all DONE at:‘, ctime() 3637if__name__ == ‘__main__‘: 38 main()
1 # !usr/bin/env python 2 3 from myThread import MyThread 4from time import time 5 6def fabonacci(n): 7if n <= 2: 8return 1 9if n > 2: 10return fabonacci(n-1) + fabonacci(n-2) 1112def factorial(n): 13if n <= 1: 14return 1 15if n > 1: 16return factorial(n-1) * n 1718def count(n): 19 sum = 0 20for i in range(n+1): 21 sum += i 22return sum 2324def main(): 25 t1 = time() 26 threads = list() 27 loops = [32,10,100000] 2829 threads.append(MyThread(fabonacci, (loops[0],))) 30 threads.append(MyThread(factorial, (loops[1],))) 31 threads.append(MyThread(count, (loops[2],))) 3233for t in threads: 34 t.start() 3536for t in threads: 37 t.join() 3839for t in threads: 40print t.func.__name__, ‘(%d)=‘ % t.args[0],41 t.getResult(), ‘time:%f‘ % t.getts() 42 t2 = time() 43print‘All time:%f‘ % (t2-t1) 4445 t1 = time() 46 fabonacci(loops[0]) 47 factorial(loops[1]) 48 count(loops[2]) 49 t2 = time() 50print‘%f‘ % (t2-t1) 515253if__name__ == ‘__main__‘: 54 main() 55
1 # !usr/bin/env python 2 3 import threading 4 from time import time 5 6class MyThread(threading.Thread): 7def__init__(self, func, args): 8 self.func = func 9 self.args = args 10 self.res = None 11 self.ts = 0 12 threading.Thread.__init__(self) 1314def run(self): 15 t1 = time() 16 self.res = apply(self.func, self.args) 17 t2 = time() 18 self.ts = t2 - t1 1920def getResult(self): 21return self.res 2223def getts(self): 24return self.ts
threading 模块中的其它函数
1#!/usr/bin/env python 2 3from random import randint 4from time import sleep 5from Queue import Queue 6from myThread import MyThread 7 8def writeQ(queue): 9print‘producting object for Q...‘10 queue.put(‘product‘, 1) 11print"size now %d" % queue.qsize() 1213def readQ(queue): 14 val = queue.get(1) 15print‘consumed object from Q... size now, %d‘ %16 queue.qsize() 1718def writer(queue, loops): 19for i in range(loops): 20 writeQ(queue) 21 sleep(randint(1, 3)) 2223def reader(queue, loops): 24for i in range(loops): 25 readQ(queue) 26 sleep(randint(2, 5)) 2728 funcs = [writer, reader] 29 nfuncs = range(len(funcs)) 3031def main(): 32 nloops = randint(2, 5) 33 q = Queue(32) 3435 threads = [] 36for i in nfuncs: 37 t = MyThread(funcs[i], (q, nloops)) 38 threads.append(t) 3940for i in nfuncs: 41 threads[i].start() 4243for i in nfuncs: 44 threads[i].join() 4546print‘all DONE‘4748if__name__ == ‘__main__‘: 49 main()
18.6 相关模块
原文:http://www.cnblogs.com/BugQiang/p/4743106.html
内容总结
以上是互联网集市为您收集整理的18 多线程编程 - 《Python 核心编程》全部内容,希望文章能够帮你解决18 多线程编程 - 《Python 核心编程》所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。