python中gevent协程库

gevent协程库使用

"""
    gevent 比 greenlet 更强. 协程库
   协程是单线程, 遇到time.sleep() 是不能切换的.

   gevent基于greenlet, 不需要手动切换, 遇到阻塞自动切换. 但是越到延时不切换.
   gevent.sleep(2)  模拟阻塞, 会切换.
   gevent.spawn(func)  启动协程对象.
   gevent.joinall(list)    等待指定的greenlet走完, 再走.
"""
import time
import gevent
import random
from gevent.queue import Queue

q = Queue(2)


def consumer():
    while True:
        item = q.get()
        print("consumer {}".format(item))
        time.sleep(2)  # 会延时.


def producer():
    while True:
        item = random.randint(0, 99)  # 0到99的随机整数.
        q.put(item)
        print("producer {}".format(item))
        time.sleep(2)


p = gevent.spawn(producer)  # 启动协程. 还可以 , + 函数参数.
c = gevent.spawn(consumer)
gevent.joinall([p, c])  # 阻塞当前流程, 执行完给定的greenlet, 才继续走.

猜你喜欢

转载自blog.csdn.net/One_of_them/article/details/82012093