181117-Python线程与协程

文章目录
  1. 1. 线程
  2. 2. 协程
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 本篇博文主要介绍python中线程与协程的简单使用姿势

    1. 线程

    线程,在使用之前需要先引入 threading 模块,基本的使用方式比较简单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import random
    import threading
    from threading import Thread


    def 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 random
    import threading
    from threading import Thread


    class 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. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    知识星球

    goals

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×