为什么使用 gevent.joinall() 而不是 pool.imap_unordered() 到 运行 Greenlets?
Why Use gevent.joinall() Instead of pool.imap_unordered() to Run Greenlets?
标题说明了一切。在池中并行使用属于 gevent.Pool 到 运行 greenlets 的方法之一(sort-of)似乎更好更快,而不是 gevent.joinall()。每种方法的优缺点是什么?
我认为关键区别不在于原始性能,而在于性能管理。当您使用 gevent.joinall() 时,您必须自己管理同时存在多少个小绿叶。天真的实现将创建计算请求可能需要的数量。
另一方面,gevent.Pool 可以很容易地配置为限制一次 运行ning 的数量,从而防止 运行ning 您的应用程序资源不足。
像往常一样,这是权衡。您的池可能 运行 较慢,因为它可能不会像使用 gevent.joinall() 的天真实现那样允许 运行 尽可能多的 greenlets,但是,您不太可能 运行 你的应用程序资源不足(并级联成其他错误)。
最终你必须回答这样的问题:你可能会收到太多请求吗?你有足够的资源可以利用吗?原始峰值性能是否比平均可靠性更重要?
标题说明了一切。在池中并行使用属于 gevent.Pool 到 运行 greenlets 的方法之一(sort-of)似乎更好更快,而不是 gevent.joinall()。每种方法的优缺点是什么?
我认为关键区别不在于原始性能,而在于性能管理。当您使用 gevent.joinall() 时,您必须自己管理同时存在多少个小绿叶。天真的实现将创建计算请求可能需要的数量。
另一方面,gevent.Pool 可以很容易地配置为限制一次 运行ning 的数量,从而防止 运行ning 您的应用程序资源不足。
像往常一样,这是权衡。您的池可能 运行 较慢,因为它可能不会像使用 gevent.joinall() 的天真实现那样允许 运行 尽可能多的 greenlets,但是,您不太可能 运行 你的应用程序资源不足(并级联成其他错误)。
最终你必须回答这样的问题:你可能会收到太多请求吗?你有足够的资源可以利用吗?原始峰值性能是否比平均可靠性更重要?