Vì vậy, tôi đang viết một daemon dựa trên Twisted khác. Nó sẽ có một giao diện xmlrpc như bình thường vì vậy tôi có thể dễ dàng giao tiếp với nó và có các quá trình trao đổi dữ liệu khác với nó khi cần thiết.Twisted + SQLAlchemy và cách tốt nhất để làm điều đó
Daemon này cần truy cập cơ sở dữ liệu. Chúng tôi đã sử dụng thuật toán SQL Alchemy thay cho các chuỗi SQL mã hóa cứng cho các dự án mới nhất của chúng tôi - những dự án chủ yếu được thực hiện cho các ứng dụng web trong giá treo.
Chúng tôi muốn làm tương tự cho ứng dụng này và sử dụng lại mã thư viện sử dụng thuật toán SQL Alchemy. Vậy lam gi? Tất nhiên, kể từ khi thư viện được viết để sử dụng trong ứng dụng giá treo, đó là tất cả mã kiểu chặn thẳng về phía trước mà mọi người quen thuộc và tất cả không bị chặn được xử lý một cách kỳ diệu bởi giá treo thông qua luồng, người dân địa phương, phiên scoped và trên.
Vì vậy, bây giờ cho Twisted tôi đoán tôi là một chút khó khăn. Tôi có thể:
- Chỉ cần viết sql Tôi cần trực tiếp nếu nó tối thiểu và sử dụng hồ bơi dbapi xoắn để làm runInteractions vv khi tôi cần nhấn db.
- Sử dụng các đối tượng và các phương pháp chặn vốn có trong thư viện của chúng tôi và chặn ngay bây giờ và sau đó trong daemon Xoắn của tôi. Bah.
- Sử dụng sAsync được cập nhật lần cuối vào năm 2008 và sử dụng lại các mô hình chúng tôi đã xác định nhưng không thực sự và điều này không giải quyết rằng mã thư viện cũng cần phải hoạt động trong giá treo. Điều đó thậm chí làm việc với phiên bản mới nhất của SQL Alchemy? Ai biết. Dự án đó trông thật tuyệt vời - tại sao nó lại bị bỏ rơi?
- Sinh ra một tiến trình con riêng biệt và xử lý mã thư viện và tất cả nó chặn, kết quả được trả lại cho daemon của tôi khi sẵn sàng như đối tượng được khắc phục thông qua YAML trên xmlrpc.
- Sử dụng trì hoãnToThread và sau đó xóa các đối tượng được trả lại khi đã đảm bảo thực hiện các tải mong muốn để tôi có tất cả nội dung mà tôi có thể cần. Có vẻ như ugha với tôi.
Tôi cũng bị mắc kẹt bằng cách sử dụng Python 2.5.4 atm vì vậy chưa có 2.6 và tôi không nghĩ mình có thể thực hiện nhập từ tương lai để truy cập vào các công cụ mô-đun đa xử lý mới trong đó. Đó là OK mặc dù tôi đoán là chúng tôi đã có giao dịch với truyền thông interprocess xuống khá tốt.
Vì vậy, tôi đang hướng tới tùy chọn 4 chủ yếu vì điều đó sẽ tránh được tội lỗi chết người của sự sao chép logic với tùy chọn 1 trong khi vẫn ở cách xa chủ đề.
Nỗ lực đầu tiên của tôi sẽ là tùy chọn 2 để thực hiện điều này và sau đó tách các cuộc gọi sang mã thư viện có thể thành một quá trình riêng biệt, có vẻ như có thể mất quá nhiều thời gian để chặn. Buồn. Có lẽ một sự kết hợp của Stackless Python và Twisted sẽ rất thú vị ở đây.
Bất kỳ ý tưởng nào tốt hơn?
Cảm ơn Jacob - Tôi đã thử Storm trước mùa thu trước khi chọn cho SQL Alchemy. Việc chèn dữ liệu không được chấp nhận chậm với Storm tại thời điểm đó. Có lẽ đó không còn là vấn đề nữa - đã lấy từ 2 đến 3 giây cho mỗi lần chèn vào MySQL cho một trong các bảng của chúng tôi. Tôi cũng đã sử dụng runInteration và runQuery trong twisted với các công cụ kết nối của họ và nó hoạt động tốt. Vấn đề là tôi cũng muốn nó hoạt động trong thế giới Pylons. Vì vậy, điều tiếp theo để xem xét là [Eventlet] (http://eventlet.net/) và [gevent] (http://www.gevent.org/) Sau này được cho là nhanh hơn/tốt hơn nhưng không đi với Twisted . – Khorkrak
Liên kết không hoạt động. Phải không? http://divmod.readthedocs.org/en/latest/products/nevow/storm-approach.html –
Cảm ơn! Đã cập nhật với liên kết mới. –