मैं asyncore से अपरिचित हूं, और टकराव ट्यूटोरियल के कुछ परिचय को छोड़कर एसिंक्रोनस प्रोग्रामिंग का बहुत सीमित ज्ञान है।asyncore कॉलबैक थ्रेड लॉन्च ... ठीक है?
मैं धागे से सबसे परिचित हूं और अपने सभी ऐप्स में उनका उपयोग करता हूं। एक विशेष ऐप couchdb डेटाबेस का इंटरफ़ेस के रूप में उपयोग करता है। इसमें परिवर्तन और अपडेट की तलाश में डीबी को लंबे समय तक चलाना शामिल है। मॉड्यूल मैं couchdb के लिए उपयोग करता हूं couchdbkit है। यह इन परिवर्तनों को देखने के लिए एसिंककोर लूप का उपयोग करता है और उन्हें कॉलबैक पर भेजता है।
तो, मुझे इस कॉलबैक से पता चला है जहां मैं अपने कार्यकर्ता धागे लॉन्च करता हूं। यह एसिंक्रोनस और थ्रेडेड प्रोग्रामिंग मिश्रण करने के लिए थोड़ा कच्चा लगता है। मुझे वास्तव में couchdbkit पसंद है, लेकिन मेरे कार्यक्रम में मुद्दों को पेश नहीं करेंगे।
तो, मेरा सवाल यह है कि क्या एसिंक कॉलबैक से धागे को आग लगाना सुरक्षित है?
यहाँ कुछ कोड है ...
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.
अद्यतन:
अधिक इस को देखने के बाद, मैं couchdbkit गुरु के लिए एक अतिरिक्त प्रश्न है। डेटाबेस का उपयोग कर संभावित रूप से सैकड़ों धागे होंगे। जैसा कि आप मेरे कोड नमूने में देख सकते हैं, मैं प्रति थ्रेड को couchdbkit.डेटाबेस ऑब्जेक्ट को तुरंत चालू कर रहा हूं। मुझे लगता है कि यह अपमानजनक हो सकता है। तो, क्या धागे के बीच विश्व स्तर पर एक डेटाबेस ऑब्जेक्ट का उपयोग करना ठीक है?
हाँ प्रति कार्य आदेश के लिए एक नया धागा बनाना विचार है। प्रत्येक कर्मचारी एक सुरंग खोल देगा और रिमोट डिवाइस पर विभिन्न रखरखाव कार्यों को करेगा। मैंने थ्रेड पूल नहीं माना है, लेकिन हो सकता है कि कॉलबैक का उपयोग कैसे किया जाता है, यह एक अच्छा विचार हो सकता है। इनपुट के लिए धन्यवाद। – sbartell