- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解 eventlet.tpool 有什么用。文档说 tpool.execute() 允许您获取阻塞函数并在新线程中运行它。但是,tpool.execute() 方法本身会阻塞,直到线程完成!那么这有什么用呢?如果我有一些阻塞/长时间运行的函数 myfunc() 并直接调用它,它就会阻塞。如果我在 tpool.execute(myfunc) 中调用它,那么 tpool.execute(myfunc) 调用将被阻止。到底有什么区别?
我唯一能猜到的是,当直接调用 myfunc() 时,它不仅会阻塞这个协程,还会阻止其他协程运行,而调用 tpool.execute() 会阻塞当前协程,但会以某种方式让步,这样其他协程可以运行。是这样吗?否则我看不出 tpool 有什么用。
最佳答案
你自己写的答案,我只能改写。
关于 Eventlet、Gevent、Twisted、Asyncio 和其他协作式多任务库,我们使用术语“阻塞”来表示它阻塞所有内容。未修补的 time.sleep(1)
将阻止所有协程/greenthreads,这与操作系统线程语义相反,后者只会阻止调用者操作系统线程并允许其他操作系统线程继续。
为了区分阻塞 OS 线程的事物和阻塞协程/greenthread 的事物,我们使用术语“屈服”。屈服函数是一种允许执行其余协程,同时阻止(由于 Python 执行语义)仅调用协程的函数。
有了这个强大的术语,tpool.execute()
将阻塞调用转变为产生调用。
与 eventlet.spawn(tpool.execute, fun, ...)
结合使用,它甚至不会阻塞调用者协程。也许您会发现这是一个有用的组合。
补丁总是受欢迎的。 Eventlet 是一个很棒的库,因为它包含了许多伟大人士的共同努力。
关于python - eventlet tpool 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947405/
我想了解 eventlet.tpool 有什么用。文档说 tpool.execute() 允许您获取阻塞函数并在新线程中运行它。但是,tpool.execute() 方法本身会阻塞,直到线程完成!那么
我的理解是,tpool 为您提供了一个 native 线程池,而 Greenpool 为您提供了绿色线程池(基本上所有绿色线程都在一个 native 线程中)。 tpool def my_func(s
我是一名优秀的程序员,十分优秀!