eventlet tpool 有什么用?

How is eventlet tpool useful?

我想了解 eventlet.tpool 有什么用。文档说 tpool.execute() 允许您在新线程中使用阻塞函数并 运行 它。但是,tpool.execute() 方法本身会阻塞,直到线程完成!那么这有什么用呢?如果我有一些 blocking/long 运行ning 函数 myfunc() 并直接调用它,它会阻塞。如果我在 tpool.execute(myfunc) 中调用它,那么 tpool.execute(myfunc) 调用将被阻止。到底有什么区别?

我唯一能猜到的是,当直接调用myfunc()时,不仅会阻塞这个协程,还会阻止其他协程运行ning,而调用tpool.execute()会阻塞当前协程,但以某种方式让步,以便其他协程可以 运行。是这样吗?否则我看不出 tpool 有什么用。

你自己写的答案,我只能改写了。

关于 Eventlet、Gevent、Twisted、Asyncio 和其他协作式多任务处理库,我们使用术语 "blocking" 来表示它会阻塞所有内容。未修补的 time.sleep(1) 将阻塞所有 coroutines/greenthreads 而不是 OS 线程语义,它只会阻塞调用者 OS 线程并允许其他 OS 线程继续。

为了区分阻塞 OS 线程的事物和阻塞 coroutine/greenthread 线程的事物,我们使用术语 "yielding"。屈服函数是一种允许执行其余协程,同时阻塞(由于 Python 执行语义)仅调用协程的函数。

有了这个强大的术语,tpool.execute() 将阻塞调用变成产生一个

结合eventlet.spawn(tpool.execute, fun, ...)它甚至不会阻塞调用协程。也许您会发现这是一个有用的组合。

补丁总是受欢迎的。 Eventlet 是一个很棒的库,因为它包含了许多伟大人士的共同努力。