在项目中常常需要执行一个耗时的任务,使用并行处理会大大节省时间,但Python自带的协程库asyncio使用场景非常有限,网上大多是介绍
asyncio.sleep()来模拟异步任务,但是我们写代码的时候是不会使用这个的,对于真正的耗时的任务,鄙人按照网上的文章尝试了很多种方式,都以失败告终,因为asyncio是无法识别一般的阻塞任务的,直到知道了gevent这个支持协程的包。
使用方式
pip install gevent
代码示例
import time
import gevent
from gevent import monkey; monkey.patch_all()
def test(str):
time.sleep(1)
return str
if __name__ == '__main__':
g1 = gevent.spawn(test, "a")
g2 = gevent.spawn(test, "b")
g3 = gevent.spawn(test, "c")
gevent.joinall([g1, g2, g3])
print(g1.value)
print(g2.value)
print(g3.value)
模拟了一个耗时的异步任务,可以看到,a,b,c是同时打印的,也就是说不会出现等待, 可以使用这种方式执行并行的任务。
from gevent import monkey;monkey.patch_all()必须放到被打补丁者的前面,如time,socket模块之前 或者我们干脆记忆成:要用gevent,需要将from gevent import monkey;monkey.patch_all()放到文件的开头