我需要一个对象池,但我不想自己实现它,我想找一个现成的并经过测试的Python库。
我发现了很多其他人寻找,但没有得到很多直接的答案,所以我把它带到了Stack Overflow上。
在我的情况下,我有大量的线程(使用threading
模块),它们需要偶尔调用一个基于SOAP的远程服务器。它们可以各自建立与服务器的连接,但是建立套接字并完成认证过程很昂贵(它受到服务器的限制),因此我想共享一个连接池,在需要时创建更多。
如果要池化的项是工作子进程,我可能会选择multiprocessing.pool
,但它们不是。如果它们是工作线程,我可能会选择这个实现,但它们不是。
如果它们是MySQL连接,我可能会选择pysqlpool,但它们不是。同样地,SQLAlchemy Pool也不适用。
如果有一个线程,使用可变数量的连接/对象,我会考虑这个实现,但我需要它是线程安全的。
我知道我可以相当快速地再次实现它,但鉴于有许多人在寻找它,我认为在Stack Overflow上提供一个规范答案会很好。
Queue
模块就是一个线程安全队列(基本的是LIFO,还有优先级和FIFO变体)。至于“池化什么”,我的意思是:尽可能池化轻包装或未包装的连接,因为建立连接是昂贵的部分;将当前未使用的连接包装在全新的包装对象中,为一个事务期间添加所有修剪应该是便宜且快速的比较,所以不需要池化包装器! - Alex Martelli