2

我理解阻塞代码对于事件循环(即 NodeJS)是一种罪过,但是对于 greenlets(我认为是绿色线程)呢?运行调用阻塞函数的代码是否存在问题?

4

2 回答 2

7

没有 gevent 提供的事件循环的 Greenlets 本身是非常原始的。来自一个greenlet 内的阻塞调用将阻塞所有greenlet,因为greenlet 本身没有能力屈服于IO 操作,也没有调度程序。Gevent 对套接字和文件 IO 的猴子补丁通常足以启用非阻塞 IO,即使数据库是用 python 编写并使用套接字的情况下也是如此。或者,您也可以自己修补库。

于 2012-05-05T00:21:44.627 回答
4

调用阻塞事件循环的函数当然是问题,因为其他绿色线程将等待这个函数的结束。
但是如果你使用Gevent,你可以调用阻塞函数。Gevent 修补了常见的 python 阻塞函数。在程序开始时写下这段代码,Gevent 将修补所有阻塞函数:

从 gevent 导入猴子
猴子.patch_all()
于 2012-04-18T03:47:13.907 回答