但它永远在 pool.join() 线上等待。
有人可以告诉我有什么问题吗?
没有什么!
虽然,我首先写了行下面的内容,但join()
gevent 中的函数的行为方式仍然与子进程/线程中的几乎相同。它一直阻塞,直到所有的greenlets完成。
如果您只想测试池中的所有小绿灯是否都结束了,您可能需要检查ready()
池中每个小绿灯上的 :
is_over = all(gl.ready() for gl in pool.greenlets)
基本上,.join()
不是永远等待,而是等到你的线程结束。如果您的线程之一永无止境,那么join()
将永远阻塞。因此,请确保每个 greenlet 线程都终止,并join()
在所有作业完成后重新执行。
编辑:以下仅适用于子进程或线程模块标准 API。GEvent 的 greenlet 池与“标准”API 不匹配。
线程/进程上的join()
方法的目的是使主进程/线程永远等待,直到子进程/线程结束。
您可以使用该timeout
参数使其在一段时间后恢复执行,或者您可以使用该is_alive()
方法检查它是否正在运行而不阻塞。
在进程/线程池的上下文中,join()
还需要在调用or之后触发,因此您可能希望:close()
terminate()
for row in res:
pool.spawn(fetch, row[0], row[1])
pool.close()
pool.join()