python多任务――协程的使用

匿名 (未验证) 提交于 2019-12-02 22:51:30
import time  def test1():     while True:         print("--1--")         time.sleep(0.5)         yield None  def test2():     while True:         print("--2--")         time.sleep(0.5)         yield None  if __name__ == "__main__":         t1 = test1()         t2 = test2()         while True:                 next(t1)                 next(t2)

如果没有安装,则pip install greenlet

from greenlet import greenlet import time   def test1():     while True:         print("---A---")         gr2.switch()         time.sleep(0.5)   def test2():     while True:         print("---b---")         gr1.switch()         time.sleep(0.5)   gr1 = greenlet(test1) gr2 = greenlet(test2) gr1.switch()

首先使用pip install gevent进行安装
gevent是对greenlet的再次封装,使用起来更加简便,当有耗时操作时会自动切换到其他协程。gevent封装了常用的耗时操作,如thread、socket、time、multiprocessing等模块。

import gevent import time from gevent import monkey # 打补丁,不需要改原来的耗时操作,否则是要使用gevent提供的模块 monkey.patch_all() def f(n):     for i in range(n):         print(gevent.getcurrent(), i)         # 使用gevent提供的耗时模块         # gevent.sleep(0.5)         time.sleep(0.5)   g1 = gevent.spawn(f, 5) g2 = gevent.spawn(f, 5) g3 = gevent.spawn(f, 5) # g1.join() # g2.join() # g3.join() # 一次性添加全部的任务 gevent.joinall([g1,g2,g3]) 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!