2011-01-16 11 views
9

asyncore ürününe aşina değilim ve birkaç girişten eğimli öğretici dışında çok sınırlı eşzamanlı programlama bilgisine sahip değilim.asyncore geri arama başlıkları başlatılıyor ... tamam mı?

Ben parçacığı En aşina ve tüm uygulamalarda kullanabilirsiniz. Bir uygulama, arayüzü olarak couchdb veritabanını kullanır. Bu, değişiklikleri ve güncellemeleri arayan db'nin uzunluğunu içerir. Couchdb için kullandığım modül couchdbkit'dur. Bu değişiklikleri izlemek ve bir geri çağırmaya göndermek için bir asyncore döngü kullanır. Benim işçi konuları başlatmak nerede

Yani, bu geri arama dan edilir anlamaya. Eşzamansız ve dişli programlamayı karıştırmak biraz ham görünüyor. Ben gerçekten couchdbkit'i severim, fakat programımdaki sorunları tanıtmamayı tercih ederim.

Yani, benim sorum, bir zaman uyumsuz geri çağırma gelen konuları yangın güvenli? İşte

... bazı kod

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. 

Güncelleme:

daha bunun üzerinde baktıktan sonra couchdbkit uzmanları için ek bir sorum var. Potansiyel olarak veritabanını kullanarak yüzlerce konu olacak. Kod örneğimde gördüğünüz gibi, iş parçacığı başına bir couchdbkit.Database nesnesi başlatıyorum. Bunun israf olabileceğini düşünüyorum. Yani, iş parçacığı arasında küresel olarak kullanılacak tek bir veritabanı nesnesi için sorun değil mi?

cevap

3

bu yeni konuyu sunucu yeni bir belge döndürür her zaman yaratmak olmaz mı? Ben sunucuda şey diyoruz önce iyi çalışan iş parçacığı havuzu yaratmakta olduğu tahmin ve sadece bu konu dispatch yöntemde gelen işlerini okuduğunuz bu kuyruğa bir iş eklersiniz.

Ama karıştırma parçacığı ve asenkron programlama tehlikeli kabul edilmelidir hiçbir neden yoktur.

+0

Yea, iş emri başına yeni bir konu oluşturma fikridir. Her çalışan bir tüneli açacak ve uzak bir cihazda çeşitli bakım görevleri gerçekleştirecektir. Bir iş parçacığı havuzunu düşünmedim, ancak belki geri çağırmaların nasıl kullanıldığı göz önüne alındığında bu iyi bir fikir olabilir. Giriş için teşekkürler. – sbartell