實現我需要一個Object Pool,而非執行它自己,我想我會到處尋找現成的和測試Python庫。Python的對象池設計模式
我發現什麼其他很多人looking,但沒有得到許多直接的答案,所以我把它在這裏堆棧溢出。
在我的情況下,我有大量的線程(使用threading
模塊),它需要偶爾調用遠程的基於SOAP的服務器。他們每個人都可以建立自己的連接到服務器,但是設置一個套接字並完成身份驗證過程很昂貴(它受服務器限制),所以我想共享一個連接池,只根據需要創建更多連接。
如果項目池是工人的子過程,我可能選擇multiprocessing.pool
,但事實並非如此。如果他們是工作線程,我可能選擇了this implementation,但它們不是。
如果他們是MySQL連接,我可能選擇pysqlpool,但事實並非如此。同樣,SQLAlchemy Pool已經結束。
如果有一個線程,使用可變數量的連接/對象,我會考慮this implementation,但我需要它是線程安全的。
我知道我可以很快再次實現這一點,但由於有很多人在尋找它,我想對堆棧溢出的規範答案就好了。
啊,沒錯,等着,如果池中沒有東西了,那就是列表所缺乏的。我以爲我很聰明,而不是隊列,但實際上太聰明瞭。 :) – 2009-10-03 19:22:39
@Lennart,也沒有_guarantee_的線程安全性,你可能會或可能不會遇到問題取決於實現 - 與Queue.Queue,你的線程安全性是有保證的。 – 2009-10-04 01:14:47
Python有一個線程安全的隊列已經內置?我不知道!是的,這會加快實現(我認爲這會很短,但主要是考慮併發問題)。對不起,我不瞭解你對「連接池」與「對象池」的區別。我說我想「分享連接池」,但每個連接都包含在一個對象中,所以它確實也是一個對象池。然而,我試圖做的區別在於連接對象不是活動的(與multiprocessing.pool不同)。 – Oddthinking 2009-10-05 01:42:21