大地郡主 发表于 2020-10-20 17:08:57

关于gevent的小问题!求教,谢谢

这段是我的代码
import gevent
import time


def f1(n):
    for i in range(n):
      print(gevent.getcurrent(), i)
      gevent.sleep(1)
      print('ooo')

def f2(n):
    for i in range(n):
      print(gevent.getcurrent(), i)
      gevent.sleep(4)
      print('kkk')

def f3(n):
    for i in range(n):
      print(gevent.getcurrent(), i)
      gevent.sleep(0.5)

print("----1---")
g1 = gevent.spawn(f1, 5)
print("----2---")
g2 = gevent.spawn(f2, 5)
print("----3---")
g3 = gevent.spawn(f3, 5)
#print("----4---")
#g1.join()
#g2.join()
#g3.join()


我尝试把join()给注释掉,他的运行结果是只打印了1,2,3,函数里面的什么都没打。我猜想可能是因为gevent.spawn()只创建了greenlet对象,但是并没有执行greenlet的switch方法。但是我再网上查了下,gevent.spawn()的效果是“创建一个普通的Greenlet对象并切换”。请问到底是怎么回事?

kogawananari 发表于 2020-10-20 22:14:49

它其实偷偷在用子线程切代码运行 但是你不join 主线程执行到最后一行就没了呗 直接退出程序了
页: [1]
查看完整版本: 关于gevent的小问题!求教,谢谢