起因
应用 nameko 的时候,想看看 nameko 的连贯复用原理(指的是和 rabbitmq 的 amqp 网络连接的复用)
个别连贯复用有两种计划:
- TLS(Thread Local Storage)
- 连接池
第一种计划,实现最简略,然而有局限性。比方应用线程池的状况下才有用,比方应用协程、或者无复用的线程就不适合了
第二种计划,连接池是最通用的计划,但也是最麻烦的计划。
那 nameko 应用的是哪种计划呢?答案是:连接池
好了,既然咱们曾经晓得了这个事实,在深刻这个事实之前,先来理解一下 kombu 的连接池机制吧!
kombu 的连接池
from kombu import Connectiondef eqhash(o): """Call ``obj.__eqhash__``.""" try: return o.__eqhash__() except AttributeError: return hash(o)amqp_uri = 'amqp://pon:[email protected]:5672//'conn1 = Connection( amqp_uri)conn2 = Connection( amqp_uri)assert eqhash(conn1) == eqhash(conn2)