Python 阻止使用greenlet是一个问题吗?

Python 阻止使用greenlet是一个问题吗?,python,asynchronous,nonblocking,green-threads,greenlets,Python,Asynchronous,Nonblocking,Green Threads,Greenlets,我理解当涉及到事件循环(即NodeJS)时,阻塞代码是一种罪恶,但是对于greenlet(我认为是绿色线程)又如何呢?运行调用阻塞函数的代码时是否存在问题?调用阻塞事件循环的函数当然是问题,因为其他绿色线程将等待此函数的结束。 但如果使用,则可以调用阻塞函数。Gevent修补了常见的python阻塞函数。 在程序开始时写入此命令,Gevent将修补所有阻塞功能: from gevent import monkey monkey.patch_all() 从gevent导入猴子 猴子 没有geven

我理解当涉及到事件循环(即NodeJS)时,阻塞代码是一种罪恶,但是对于greenlet(我认为是绿色线程)又如何呢?运行调用阻塞函数的代码时是否存在问题?

调用阻塞事件循环的函数当然是问题,因为其他绿色线程将等待此函数的结束。
但如果使用,则可以调用阻塞函数。Gevent修补了常见的python阻塞函数。 在程序开始时写入此命令,Gevent将修补所有阻塞功能:

from gevent import monkey monkey.patch_all() 从gevent导入猴子 猴子
没有gevent提供的事件循环的greenlet本身是。来自一个greenlet内的阻塞调用将阻塞所有greenlet,因为单独的greenlet没有在IO操作上屈服的能力,也没有调度器。Gevent对socket和文件IO的monkey补丁通常足以支持非阻塞IO,即使数据库库是用python编写的,并且使用socket。或者,您也可以自己修补库

我的印象是,绿色线程与事件循环不同,在事件循环中调用阻塞代码是一个问题,因为它会阻止处理所有其他请求。我不确定在使用greenlet时是否会调用阻塞代码,比如阻塞数据库调用。似乎gevent monkey补丁只阻塞了网络功能。数据库则不同。1) 与慢速db请求并发的请求通常也是慢速的。数据库吞吐量很快会随着连接数的增加而降低。2) 坏的或速度慢的网络服务器不应阻止对其他快速服务器的请求。网络并行通常会增加吞吐量。您的示例是死链接。你能修一下吗?谢谢我不确定这是对朋友的否决票,但好吧,这是你的一角钱。