2011-08-23 24 views
13

Quickie đây mà cần chuyên môn miền thêm về pymongo hơn tôi có ngay bây giờ:pymongo + gevent: ném cho tôi một quả chuối và chỉ khỉ_patch?

Are "quyền" bộ phận của tài xế pymongo viết bằng python cho tôi để gọi gevent monkey_patch() và thay đổi thành công của chặn hành vi trên r pymongo/w trong các greenlet "không đồng bộ" gevent?

Nếu điều này đòi hỏi phải làm việc nhiều hơn một chút trên gevent và pymongo - nhưng nó là khả thi - tôi sẽ sẵn sàng đưa vào thời gian miễn là tôi có thể nhận được một chút hướng dẫn về irc.

Cảm ơn!

Lưu ý: Ở quy mô nhỏ, mongo viết không phải là một vấn đề lớn bởi vì chúng tôi chỉ đang xếp hàng một "yêu cầu" viết trước khi bỏ chặn. NHƯNG nói chuyện với fiorix về trình điều khiển mong muốn không đồng bộ của anh ấy (https://github.com/fiorix/mongo-async-python-driver), thậm chí cả việc viết nhanh (mong muốn) của mongo có thể gây ra các vấn đề trong các ứng dụng asyncronous ở quy mô lớn. (Và tất nhiên, các lần đọc không chặn có thể gây ra vấn đề ngay từ đầu!)

Trả lời

18

Tôi đã sử dụng PyMongo với Gevent và dưới đây là một vài điều bạn cần phải xem ra cho:

  1. nhanh chóng chỉ có một pymongo.Connection đối tượng, tốt hơn như là một biến toàn cầu hoặc mô-đun cấp. Điều này quan trọng bởi vì Connection có trong chính nó một hồ bơi!
  2. Khỉ vá mọi thứ, hoặc ít nhất CẢ socket và luồng. Do việc sử dụng các địa chỉ chủ đề trong Connection, chỉ việc vá ổ cắm là không đủ.
  3. Hãy nhớ gọi số end_request để trả lại kết nối với hồ bơi.

Câu trả lời cho câu hỏi của bạn được tiếp tục, PyMongo chỉ hoạt động tốt với Gevent.

+0

cảm ơn Bernie Hackett trên nhóm mongodb google cho bản cập nhật này: vẫn có vấn đề mà mongo có giới hạn trên trên kết nối của nó thấp hơn nhiều số lượng greenlet mà hầu hết ứng dụng sẽ sinh sản nếu họ đang sử dụng mongo trong vị trí đầu tiên (1000 của greenlets). Một số bản vá lỗi mongodb mới nhất tại đây https://github.com/mgood/mongo-python-driver đang cố gắng làm cho trò chơi của Gevent trở nên độc đáo với việc ghép nối chuỗi của mongo. Đây là một ví dụ khác về bản vá * có thể * hoạt động: http://code.activestate.com/recipes/577490-mongodb-pool-for-gevent-and-pymongo-packages/. – egbutter

+0

Bạn có, hoặc biết, bất kỳ ví dụ nào cho thấy PyMongo đang được sử dụng với Gevent? –

+0

Và đây là một ví dụ khác về bản vá có thể hoạt động: https://gist.github.com/1184264 – kkurian

2

Kiểm tra ban đầu dường như không thực hiện bất kỳ thao tác ổ cắm nào trong mã c nên sẽ ổn. chỉ xanh).