2011-01-16 20 views
9

Tôi không quen với asyncore và có kiến ​​thức rất hạn chế về lập trình không đồng bộ, ngoại trừ một vài giới thiệu cho các hướng dẫn được xoắn.gọi lại asyncore tung chủ đề ... ok để làm gì?

Tôi quen thuộc nhất với các chủ đề và sử dụng chúng trong tất cả các ứng dụng của tôi. Một ứng dụng cụ thể sử dụng cơ sở dữ liệu couchdb làm giao diện của nó. Điều này liên quan đến việc kéo dài db tìm kiếm các thay đổi và cập nhật. Mô-đun tôi sử dụng cho couchdb là couchdbkit. Nó sử dụng một vòng lặp asyncore để theo dõi những thay đổi này và gửi chúng đến một cuộc gọi lại.

Vì vậy, tôi tìm từ lời gọi lại này là nơi tôi khởi chạy chuỗi công việc của mình. Nó có vẻ hơi thô để trộn không đồng bộ và lập trình luồng. Tôi thực sự thích couchdbkit, nhưng không muốn giới thiệu các vấn đề vào chương trình của tôi.

Vì vậy, câu hỏi của tôi là an toàn để kích hoạt chủ đề từ một cuộc gọi lại không đồng bộ?

Dưới đây là một số mã ...

def dispatch(change): 
    global jobs, db_url # jobs is my queue 
    db = Database(db_url) 
    work_order = db.get(change['id']) # change is an id to the document that changed. 
            # i need to get the actual document (workorder) 

    worker = Worker(work_order, db) # fire the thread 
    jobs.append(worker) 
    worker.start() 
    return 


main() 
. 
. 
. 

consumer.wait(cb=dispatch, since=update_seq, timeout=10000) #wait constains the asyncloop. 

Cập nhật:

Sau khi nhìn qua này hơn, tôi có một câu hỏi bổ sung cho các bậc thầy couchdbkit. Có khả năng sẽ có hàng trăm chủ đề bằng cách sử dụng cơ sở dữ liệu. Như bạn có thể thấy trong mẫu mã của tôi, tôi đang instantiating một đối tượng couchdbkit.Database trên mỗi luồng. Tôi nghĩ điều này có thể lãng phí. Vì vậy, nó là ok cho một đối tượng cơ sở dữ liệu duy nhất được sử dụng trên toàn cầu trong số các chủ đề?

Trả lời

3

Điều này sẽ không tạo chuỗi mới mỗi khi máy chủ trả về tài liệu mới? Tôi sẽ đoán rằng bạn đang tạo ra một nhóm chủ đề công nhân tốt nhất trước bạn gọi bất cứ thứ gì trên máy chủ và chỉ thêm công việc vào hàng đợi mà các chủ đề này đang đọc công việc của họ từ phương thức dispatch.

Nhưng không có lý do tại sao việc trộn luồng và lập trình không đồng bộ nên được xem là nguy hiểm.

+0

Yea tạo chuỗi mới cho mỗi đơn đặt hàng công việc là ý tưởng. Mỗi nhân viên sẽ mở một đường hầm và thực hiện các nhiệm vụ bảo trì khác nhau trên một thiết bị từ xa. Tôi đã không được coi là một hồ bơi thread, nhưng có thể đưa ra cách gọi lại được sử dụng này có thể e một ý tưởng tốt. Cảm ơn bạn đã nhập. – sbartell

Các vấn đề liên quan