मुझे ऐसी कक्षा बनाने की आवश्यकता है जो एसएमटीपी संदेशों को प्राप्त और स्टोर कर सके, यानी ई-मेल। ऐसा करने के लिए, here पोस्ट किए गए उदाहरण के अनुसार, मैं asyncore
का उपयोग कर रहा हूं। हालांकि, asyncore.loop()
अवरुद्ध है इसलिए मैं कोड में और कुछ नहीं कर सकता।कुछ भी अवरुद्ध किए बिना, अजगर में एक वर्ग के भीतर asyncore को कैसे संभालें?
तो मैंने धागे का उपयोग करने के बारे में सोचा। यहाँ एक उदाहरण-कोड पता चलता है कि मेरे मन में है:
class MyServer(smtpd.SMTPServer):
# derive from the python server class
def process_message(..):
# overwrite a smtpd.SMTPServer method to be able to handle the received messages
...
self.list_emails.append(this_email)
def get_number_received_emails(self):
"""Return the current number of stored emails"""
return len(self.list_emails)
def start_receiving(self):
"""Start the actual server to listen on port 25"""
self.thread = threading.Thread(target=asyncore.loop)
self.thread.start()
def stop(self):
"""Stop listening now to port 25"""
# close the SMTPserver from itself
self.close()
self.thread.join()
मुझे आशा है कि आप चित्र मिलता है। कक्षा MyServer
गैर-अवरुद्ध तरीके से बंदरगाह 25 को सुनने और बंद करने में सक्षम होना चाहिए, सुनने के दौरान संदेशों के लिए पूछताछ करने में सक्षम होना चाहिए (या नहीं)। start
विधि asyncore.loop()
श्रोता शुरू करती है, जो, जब कोई ईमेल प्राप्त होता है, तो आंतरिक सूची में शामिल होता है। इसी तरह, stop
विधि इस सर्वर को रोकने में सक्षम होना चाहिए, जैसा कि here सुझाया गया है।
तथ्य के रूप में मैं उम्मीद इस कोड काम नहीं करता है के बावजूद करने के लिए (asyncore हमेशा के लिए चलाने के लिए मैं भी ऊपर stop
विधि कॉल लगता है,। error
मैं बढ़ा stop
भीतर catched है, लेकिन asyncore.loop()
युक्त target
समारोह के भीतर नहीं), मुझे यकीन नहीं है कि समस्या का मेरा दृष्टिकोण समझदार है या नहीं। उपर्युक्त कोड को ठीक करने या तीसरे पक्ष के सॉफ़्टवेयर का उपयोग करके के बिना अधिक ठोस कार्यान्वयन () का प्रस्ताव देने के लिए कोई सुझाव, की सराहना की जाती है।
मुझे कुछ भ्रम लगता है। 'Asyncore.loop()' अवरुद्ध करने में समस्या क्या है? क्या आप समझते हैं कि आप 'लूप' फ़ंक्शन क्यों कहते हैं और यह क्या करता है? – mmgp
@mmgp: 'asyncore.loop()' के साथ समस्या यह है कि यह अवरुद्ध है।मैं किसी अन्य समय किसी भी समय कक्षा का उपयोग करने में सक्षम होना चाहता हूं। दूसरी तरफ, मैं 'asyncore.loop()' पर एक विशेषज्ञ नहीं हूं, लेकिन AFAIK यह आंतरिक 'select.select' को आंतरिक करता है, जो दिख रहा है उदा। इस मामले में पोर्ट 25 पर आने वाले एसएमटीपी संदेशों के लिए। – Alex
क्या आपने GUI टूलकिट का उपयोग किया है? असल में वे सभी घटना loops पर आधारित हैं। आपको चीजें व्यवस्थित करने की ज़रूरत है कि वे "ईवेंट लूप" द्वारा प्रबंधित किए जाने वाले ईवेंट तैयार करें। मैंने जो भ्रम का उल्लेख किया है वह इसलिए है क्योंकि आप किसी घटना लूप का उपयोग करने के बारे में अनजान प्रतीत होते हैं, क्या यह मामला है? – mmgp