我正在使用adbapi
连接池将twisted
与MySQL配合使用。我只向数据库中插入数据(尽管速度非常快)。
如果连接池因所有连接都处于繁忙状态而用尽了连接,会发生什么情况?当在繁忙的连接池上调用runinteraction
时,twisted事件循环是否会被阻塞?
我正在使用adbapi
连接池将twisted
与MySQL配合使用。我只向数据库中插入数据(尽管速度非常快)。
如果连接池因所有连接都处于繁忙状态而用尽了连接,会发生什么情况?当在繁忙的连接池上调用runinteraction
时,twisted事件循环是否会被阻塞?
tl;dr 调用 RunInteraction
会返回一个 Deferred,不会阻塞。
基本上,它返回 thread.deferToThreadPool
。
然后调用 threadpool.callInThreadWithCallback
后返回一个 Deferred。
而 那个函数
调用了:self._team.do(inContext)
,其中_team
在此处被创建
......经过更多的抽象之后,最终我们只需要将请求附加到挂起任务队列中以等待工作线程(连接)空闲即可。
所以您的插入操作最终会被写入数据库(除非在挂起列表中有太多任务时进程耗尽内存)。