本篇博文主要介绍python中线程与协程的简单使用姿势
 
1. 线程 线程,在使用之前需要先引入 threading 模块,基本的使用方式比较简单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import  randomimport  threadingfrom  threading import  Threaddef  cal () :    print('print cal %s'  % threading.current_thread().name) t = threading.Thread(target=cal, name='testThread' ) t.start() t.join() print("over" ) 
 
使用线程的三步骤:
创建线程 threading.Thread(target=cal, name='testThread') 
执行线程 t.start() 
等待线程执行完毕 t.join() 
 
如果需要获取线程执行之后返回的结果,改怎么办?这个时候就需要简单的封装一下,因为Thread.join默认是没有返回值的,但是我们可以通过继承Thread类来实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import  randomimport  threadingfrom  threading import  Threadclass  MyThread (threading.Thread) :    def  __init__ (self, group=None, target=None, name=None, args=() , kwargs=None, *, daemon=None) :         Thread.__init__(self, group, target, name, args, kwargs, daemon=daemon)         self._return = None      def  run (self) :         if  self._target is  not  None :             self._return = self._target(*self._args, **self._kwargs)     def  join (self) :         Thread.join(self)         return  self._return def  cal () :    print('print cal %s'  % threading.current_thread().name)     return  random.random() * 10  t = MyThread(target=cal, name="newTestThread" ) t.start() ans = t.join() print("out" , ans) 
 
2. 协程 比线程更优的实现方式,没实际使用过,先拿一个case放着,后面再说
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def consumer():     r = ''     while True:         n = yield r         if not n:             return         print('[CONSUMER] Consuming %s...' % n)         r = '200 OK' def produce(c):     c.send(None)     n = 0     while n < 5:         n = n + 1         print('[PRODUCER] Producing %s...' % n)         r = c.send(n)         print('[PRODUCER] Consumer return: %s' % r)     c.close() c = consumer() produce(c) 
 
II. 其他 一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明 尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
3. 扫描关注 一灰灰blog 
知识星球