Tôi cần một số Object Pool và thay vì tự thực hiện nó, tôi nghĩ tôi sẽ xem xét thư viện Python đã sẵn sàng và thử nghiệm.Thực hiện Python Mẫu thiết kế đối tượng hồ bơi
Những gì tôi thấy là rất nhiều người khác looking, nhưng không nhận được nhiều câu trả lời thẳng, vì vậy tôi đã đưa nó qua đây để Stack tràn.
Trong trường hợp của tôi, tôi có một số lượng lớn các luồng (sử dụng mô-đun threading
), đôi khi cần phải gọi một máy chủ dựa trên SOAP từ xa. Mỗi người có thể thiết lập kết nối riêng của họ với máy chủ, nhưng việc thiết lập một socket và hoàn thành quá trình xác thực là tốn kém (nó được điều chỉnh bởi máy chủ), vì vậy tôi muốn chia sẻ một nhóm kết nối, tạo ra nhiều hơn khi cần thiết.
Nếu các mục vào nhóm là các quy trình phụ của công nhân, tôi có thể đã chọn multiprocessing.pool
, nhưng chúng không phải là. Nếu chúng là chủ đề công nhân, tôi có thể đã chọn this implementation, nhưng chúng không phải.
Nếu chúng là các kết nối MySQL, tôi có thể đã chọn pysqlpool, nhưng chúng không phải là. Tương tự, SQLAlchemy Pool đã hết.
Nếu có một chủ đề, sử dụng số lượng kết nối/đối tượng có thể thay đổi, tôi sẽ xem xét this implementation, nhưng tôi cần nó là an toàn chỉ.
Tôi biết tôi có thể thực hiện lại điều này một cách nhanh chóng, nhưng với rất nhiều người đang tìm kiếm, tôi nghĩ câu trả lời chính tắc về Stack Overflow sẽ rất tuyệt.
Ah, phải, chờ đợi, nếu không có gì khác trong hồ bơi, đó là những gì danh sách thiếu. Tôi nghĩ tôi thông minh với danh sách thay vì xếp hàng, nhưng thực sự rất thông minh. :) –
@Lennart, cũng không có _guarantee_ về an toàn luồng, bạn có thể hoặc không thể gặp sự cố tùy thuộc vào việc triển khai - với Queue.Queue, an toàn luồng của bạn được đảm bảo. –
Python có Hàng đợi an toàn theo chủ đề đã được tích hợp sẵn? Tôi không biết điều đó! Vâng, điều đó sẽ đẩy nhanh quá trình triển khai (mà tôi nghĩ là ngắn gọn, nhưng chủ yếu là suy nghĩ thông qua các vấn đề tương tranh). Xin lỗi, tôi không hiểu sự khác biệt của bạn về "nhóm kết nối" so với "nhóm các đối tượng". Tôi nói rằng tôi muốn "chia sẻ một nhóm các kết nối", nhưng mỗi kết nối được bao bọc trong một đối tượng, vì vậy nó thực sự là một nhóm các đối tượng. Tuy nhiên, sự khác biệt mà tôi đã cố gắng tạo ra là các đối tượng kết nối KHÔNG hoạt động (không giống như multiprocessing.pool.) – Oddthinking