पायथन के मुड़ के लिए एक स्वच्छ, हल्का विकल्प? [बन्द है]


222

ए (लंबे) जबकि पहले मैंने एक वेब-स्पाइडर लिखा था जिसे मैंने एक ही समय में समवर्ती अनुरोधों को सक्षम करने के लिए मल्टीथ्रेड किया था। यह मेरे पाइथन युवाओं में था, जिन दिनों में मुझे जीआईएल और इससे जुड़े विकारों के बारे में पता था, यह मल्टीथ्रेड कोड (IE, समय की अधिकांश सामग्री बस क्रमबद्ध समाप्त हो जाती है!) के लिए बनाता है।

मैं इसे और अधिक मजबूत बनाने और बेहतर प्रदर्शन करने के लिए इस कोड को फिर से काम करना चाहता हूं। मूल रूप से दो तरीके हैं जो मैं यह कर सकता था: मैं 2.6+ में नए मल्टीप्रोसेसिंग मॉड्यूल का उपयोग कर सकता था या मैं किसी प्रकार के रिएक्टर / इवेंट-आधारित मॉडल के लिए जा सकता था। मैं इसके बजाय बाद में करूँगा क्योंकि यह बहुत सरल और कम त्रुटि वाला है।

तो यह प्रश्न इस बात से संबंधित है कि मेरी आवश्यकताओं के लिए कौन सा ढांचा सबसे उपयुक्त होगा। निम्नलिखित विकल्पों की एक सूची है जो मैं अब तक जानता हूं:

  • मुड़ : पायथन रिएक्टर चौखटों की दादी: जटिल लगता है और हालांकि थोड़ा फूला हुआ है। एक छोटे से काम के लिए खड़ी सीखने की अवस्था।
  • घटना : दोस्तों से lindenlab पर । ग्रीनलेट आधारित ढांचा जो इस प्रकार के कार्यों के लिए तैयार है। मुझे हालांकि कोड पर एक नज़र थी और यह बहुत सुंदर नहीं है: गैर-पेप 8 कंप्लेंट, प्रिंट्स के साथ बिखरे हुए (लोग ऐसा फ्रेमवर्क में क्यों करते हैं !?), एपीआई थोड़ा असंगत लगता है।
  • PyEv : अपरिपक्व, अभी इसका इस्तेमाल करने वाला कोई भी नहीं लगता, हालांकि यह कामेच्छा पर आधारित है, इसलिए इसे एक ठोस बैकेंड मिला है।
  • asyncore : stdlib से: über निम्न-स्तर, ऐसा लगता है कि बहुत सारे लेगवर्क शामिल हैं, जो मैदान से कुछ पाने के लिए हैं।
  • बवंडर : हालांकि यह एक सर्वर उन्मुख उत्पाद है जो सर्वर डायनेमिक वेबसाइटों के लिए डिज़ाइन किया गया है, जिसमें एक एसिंक्स HTTP क्लाइंट और एक साधारण ioloop है । ऐसा लगता है कि यह काम कर सकता है लेकिन ऐसा नहीं है जो इसके लिए इरादा था। [संपादित करें: दुर्भाग्य से विंडोज पर नहीं चलता है, जो इसे मेरे लिए मायने रखता है - इस लंगड़े मंच का समर्थन करने के लिए मेरे लिए यह एक आवश्यकता है]

क्या ऐसा कुछ है जो मैंने बिल्कुल याद किया है? निश्चित रूप से वहाँ एक पुस्तकालय होना चाहिए जो एक सरल एसिंक्स नेटवर्किंग लाइब्रेरी के मीठे-स्पॉट को फिट करता है!

[संपादित करें: बड़ा धन्यवाद करने के लिए intgr करने के लिए अपने सूचक के लिए इस पेज । यदि आप नीचे तक स्क्रॉल करते हैं, तो आप देखेंगे कि परियोजनाओं की एक बहुत अच्छी सूची है, जिसका उद्देश्य इस कार्य को एक या दूसरे तरीके से निपटाना है। यह वास्तव में ऐसा लगता है कि चीजें वास्तव में ट्विस्ट की शुरुआत के बाद से आगे बढ़ी हैं: लोग अब एक पारंपरिक रिएक्टर / कॉलबैक उन्मुख एक के बजाय सह-दिनचर्या आधारित समाधान का पक्ष लेते हैं । इस दृष्टिकोण के लाभ अधिक स्पष्ट कोड हैं: मैंने निश्चित रूप से अतीत में पाया है, खासकर जब बूस्ट के साथ काम कर रहे हैंC ++ में है कि कॉलबैक आधारित कोड उन डिजाइनों को जन्म दे सकता है जो हार्ड-टू-फॉलो हो सकते हैं और अप्रशिक्षित आंख के लिए अपेक्षाकृत अस्पष्ट हैं। सह-रूटीन का उपयोग करने से आपको कोड लिखने की अनुमति मिलती है जो कम से कम थोड़ा अधिक तुल्यकालिक दिखता है। मुझे लगता है कि अब मेरा काम यह देखना है कि इनमें से कौन सी एक लाइब्रेरी मुझे पसंद है और मैं इसे देखूं! खुशी है कि मैंने अब पूछा ...]

[संपादित करें: इस सवाल का अनुसरण करने वाले या इस विषय पर ठोकर खाने वाले किसी भी व्यक्ति की रुचि या किसी भी मायने में इस विषय की परवाह करता है: मुझे इस नौकरी के लिए उपलब्ध उपकरणों की वर्तमान स्थिति का एक बहुत अच्छा लेखन मिला ]


14
पाइथन को मल्टीथ्रेड किया जाता है, यह सिर्फ दो थ्रेड्स को पाइथन कोड को समवर्ती रूप से चलाने की अनुमति नहीं देता है।
8

86
मैंने आपके प्रश्न से इसके उत्तर से बहुत कुछ सीखा है।
डेनिस ओटकिडैच

2
@ डेनिस: हे, धन्यवाद मुझे लगता है! जवाबों में कुछ अच्छे संकेत भी मिले हैं, विशेषकर इंट्रेस्ट के। मैं वहाँ बहुत सारे विकल्पों के बारे में जानता था और मैं नहीं चाहता था कि उत्तर उन लोगों के साथ भरे हों, तो मुझे लगा कि मुझे पता है कि मुझे जो पता था उसकी वर्तनी में परेशानी होगी :)
jkp

5
> लोग अब पारंपरिक रिएक्टर / कॉलबैक ओरिएंटेड के बजाय सह-दिनचर्या आधारित समाधान का पक्ष लेते हैं। यह एक समझदार तुलना नहीं है। "सह-दिनचर्या आधारित समाधान" और "रिएक्टर ओरिएंटेड" समाधान ऑर्थोगोनल हैं। (इस तथ्य को नजरअंदाज करते हुए कि पायथन में कॉरटाइन्स नहीं हैं) ट्विस्टेड इनलाइन कॉलबैक पर एक नज़र डालें कि आप जिस प्रोग्रामिंग शैली को एक मजबूत, परिपक्व नेटवर्किंग परत के साथ पसंद करना चाहते हैं, उसे आप कैसे जटिल प्लेटफ़ॉर्म आइडियोसिंक्राइसिस में उजागर नहीं करेंगे।
जीन-पॉल कैल्डेरोन

2
जोड़ने के लिए कुछ बिंदु: 1. बवंडर विंडोज पर बहुत अच्छी तरह से चलता है। यह सिर्फ प्रदर्शन और मापनीय नहीं है क्योंकि यह selectआई / ओ मल्टीप्लेक्सिंग के लिए उपयोग करता है । लेकिन आपको बवंडर-प्यूव के साथ इसे एक अच्छा प्रदर्शन प्राप्त करने में सक्षम होना चाहिए । 2. अब Python 3.3+ में asyncio है और इसका बैकपोर्ट ट्रोलियस है जो इसके इवेंट लूप में किसी भी टोरनेडो एप्लिकेशन को चलाने की अनुमति देता है (ट्विस्टेड जल्द ही समर्थित होगा)।
श्लोमर

जवाबों:


28

मैं पसंद आया सहमति पायथन मॉड्यूल है जो या तो stackless अजगर microthreads या हल्के वजन सूत्रण के लिए Greenlets पर निर्भर करता है। सभी अवरुद्ध नेटवर्क I / O को पारदर्शी रूप से एक ही libeventलूप के माध्यम से अतुल्यकालिक बनाया जाता है , इसलिए यह वास्तविक अतुल्यकालिक सर्वर के रूप में लगभग कुशल होना चाहिए।

मुझे लगता है कि यह इस तरह से Eventlet के समान है।

नकारात्मक पक्ष यह है कि इसका एपीआई पायथन sockets/ threadingमॉड्यूल से काफी अलग है ; आपको अपने आवेदन के एक उचित बिट को फिर से लिखना होगा (या एक संगतता शिम परत लिखना होगा)

संपादित करें: ऐसा लगता है कि इसमें सीजेन भी है , जो समान है, लेकिन ग्रीनलेट्स के बजाय, अपने कोरआउट के लिए पायथन 2.5 के संवर्धित जनरेटर का उपयोग करता है । यह इसे सहमति और अन्य विकल्पों की तुलना में अधिक पोर्टेबल बनाता है। नेटवर्क I / O को सीधे epoll / kqueue / iocp के साथ किया जाता है।


@intgr: शानदार लिंक। मैंने उन दोनों को एक बार पहले भी देखा था, उन चीजों के प्रकार हैं जिन्हें मैं बाहर देखने के लिए उम्मीद कर रहा था। +1
jkp

3
लगता है कि चार साल पहले अंतिम अद्यतन होने के साथ सहमति एक मृत परियोजना है।
ग्यूथेन

परियोजना मर चुका है, तो Hyves करता है!
बहादुर खंबेल

1
पायथन 2.5 के बाद से बहुत कुछ हुआ है। पायथन 3.5 में asyncio महान है।
जोसेफ शीडी

99

मुड़ जटिल है, आप इसके बारे में सही हैं। मुड़ नहीं है

यदि आप यहां एक नज़र डालते हैं: http://twistedmatrix.com/trac/browser/trunk/twisted आप एक संगठित, व्यापक और बहुत अच्छी तरह से इंटरनेट के कई प्रोटोकॉल का परीक्षण सूट , साथ ही लिखने के लिए सहायक कोड पाएंगे। और बहुत परिष्कृत नेटवर्क अनुप्रयोगों को तैनात करें। मैं व्यापकता के साथ ब्लोट को भ्रमित नहीं करूंगा।

यह सर्वविदित है कि ट्विस्टेड प्रलेखन पहली नज़र से सबसे अधिक उपयोगकर्ता के अनुकूल नहीं है, और मेरा मानना ​​है कि यह दुर्भाग्यपूर्ण संख्या को दूर करता है। लेकिन यदि आप समय में मुड़ जाते हैं तो अद्भुत (IMHO) है। मैंने किया और यह इसके लायक साबित हुआ, और मैं दूसरों को भी यही कोशिश करने की सलाह दूंगा।


4
@ अंकलशा: हो सकता है कि आप सही हों, और यह बोझिल न हो, लेकिन ऐसा महसूस होता है कि कुछ आसान करने के लिए मेरे सिर को घुमाने के लिए थोड़ा बहुत है। मैं async प्रोग्रामिंग को समझता हूं, मैंने C ++ में बढ़ावा देने के साथ काम किया है :: asio तो अवधारणाएं नई नहीं हैं, लेकिन इसके सभी गम्फ जो मुड़ सामान करने के साथ कंपेयर करते हैं: यह पूरी तरह से एक नई दुनिया है, जैसे कि django वेब सामान के लिए है। फिर से जब मैं वेब सामान कर रहा हूं मैं हल्के WSGI कोड के साथ काम करता हूं और केवल एक साथ प्लग करता हूं कि मुझे क्या चाहिए। मुझे लगता है कि पाठ्यक्रमों के लिए घोड़े।
jkp

7
@ अंकुशा: erm, मैंने आज एक नज़र रखने का संकल्प लिया: 20MB में मुड़ता है! यहां तक ​​कि कोर 12 एमबी है .... अगर वह फूला हुआ नहीं है, तो मुझे यकीन नहीं है कि क्या है।
jkp

29
बुनियादी मुड़ एपीआई बहुत छोटे होते हैं (रिएक्टर, आस्थगित, प्रोटोकॉल)। ट्विस्टेड कोड में से अधिकांश उन मूल बातों का उपयोग करके async प्रोटोकॉल कार्यान्वयन है। "ब्लोट" यहां एक उपयोगी विशेषण नहीं है (या वास्तव में ज्यादातर मामलों में)। ट्विस्टेड का आकार उसके सामान की मात्रा के लिए उचित है।
डेफ

56

gevent है eventlet साफ

एपीआई-वार यह मानक पुस्तकालय (विशेष रूप से, थ्रेडिंग और मल्टीप्रोसेसिंग मॉड्यूल) के समान सम्मेलनों का अनुसरण करता है जहां यह समझ में आता है। इसलिए आपके पास काम करने के लिए कतार और घटना जैसी परिचित चीजें हैं ।

यह रिएक्टर कार्यान्वयन के रूप में केवल libevent ( अद्यतन: libev 1.0 के बाद ) का समर्थन करता है, लेकिन इसका पूरा फायदा उठाता है, libevent-http पर आधारित एक तेज़ WSGI सर्वर की विशेषता है और अधिकांश अन्य पुस्तकालयों की तरह थ्रेड पूल का उपयोग करने के विरोध में libevent-dns के माध्यम से DNS प्रश्नों को हल करता है। करना। ( अद्यतन: चूंकि 1.0 c-ares का उपयोग async DNS क्वेरी बनाने के लिए किया जाता है, थ्रेडपूल भी एक विकल्प है।)

ईवेंटलेट की तरह, यह ग्रीनलेट्स का उपयोग करके कॉलबैक और डीफ़र्ड को अनावश्यक बनाता है

उदाहरणों को देखें: कई यूआरएल , लंबे मतदान वेबचैट का समवर्ती डाउनलोड


4
मैं दूसरा जिएवेंट करूंगा - कई समाधानों की समीक्षा करने के बाद, जियवेंट ने मेरे लिए बहुत अच्छा काम किया। इसने मुझे अपने मौजूदा कार्यक्रम के बेहतर हिस्से को बनाए रखने की अनुमति दी, और जो परिवर्तन आवश्यक थे वे तुच्छ थे - सबसे अच्छा, अगर कोड को 3, 4, 5, ... वर्षों के समय में बनाए रखने की आवश्यकता है, तो यह अभी भी बनाता है। जियोवेंट से परिचित नहीं किसी के लिए भी समझदारी, ट्विस्टेड के लिए सबसे बड़ा शो स्टॉपर है मजबूत लर्निंग कर्व, यह न केवल लागू करते समय समस्याओं का कारण बनता है, बल्कि रखरखाव के दौरान लाइन को और भी नीचे कर देता है ...
मार्टिन टूरनोइज

27

इस तरह के ढांचे की वास्तव में दिलचस्प तुलना निकोलस पिएल ने अपने ब्लॉग पर की थी: यह अच्छी तरह से पढ़ने लायक है!


2
जबकि मैं मानता हूं कि यह लेख एक दिलचस्प रीड था, मुझे लगता है कि प्रस्तुत बेंचमार्क की वैधता पर विचार करना सार्थक है। यहाँ टिप्पणियाँ देखें: reddit.com/r/programming/comments/ahepg/…
Clemesha

1
@ अंकलशा, जबकि उस लाल पृष्ठ में बिंदु ध्यान देने योग्य है, बेंचमार्क एक दोहरी कोर मशीन पर किया गया था और संभावित रूप से वर्णित घातक दोष से पीड़ित नहीं था। मुझे लगता है कि यह संभव है कि क्लाइंट और सर्वर दोनों एक ही कोर पर चले, लेकिन इसकी संभावना नहीं लगती है।
पीटर हैनसेन

15

इनमें से कोई भी समाधान इस तथ्य से नहीं बचता है कि जीआईएल सीपीयू समानता को रोकता है - वे आईओ समानता प्राप्त करने के बेहतर तरीके हैं जो आपके पास पहले से ही थ्रेड के साथ हैं। अगर आपको लगता है कि आप बेहतर IO कर सकते हैं, तो हर तरह से इनमें से किसी एक को आगे बढ़ा सकते हैं, लेकिन अगर आपकी अड़चनें परिणामों को संसाधित करने में हैं, तो यहां मल्टीप्रोसेसिंग मॉड्यूल के अलावा कुछ भी मदद नहीं करेगा।


कई प्रक्रियाओं का उपयोग करने में क्या गलत है?
एमिल इवानोव

3
कुछ भी नहीं, इसलिए मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करने का सुझाव।
एडम हप्प

11

मैं जहाँ तक मुड़ फूला हुआ कॉल करने के लिए नहीं जाऊँगा, लेकिन आपके सिर को चारों ओर लपेटना मुश्किल है। मैं वास्तव में काफी समय से एक सीखने में बसने से बचता था क्योंकि मैं हमेशा 'छोटे कार्यों' के लिए कुछ आसान चाहता था।

हालाँकि, अब जब मैंने इसके साथ काम किया है तो मुझे कहना पड़ेगा कि इसमें शामिल सभी बैटरी बहुत अच्छी हैं।

अन्य सभी async पुस्तकालयों मैं अंत के साथ काम किया है जिस तरह से कम परिपक्व भी वे दिखाई देते हैं। मुड़ की घटना लूप ठोस है।

मुझे यकीन नहीं है कि कैसे मजबूत ट्विस्टेड लर्निंग कर्व को हल किया जा सकता है। यह मदद कर सकता है अगर कोई इसे पीछे छोड़ दे और कुछ चीजों को साफ कर दे, जैसे कि पीछे की सभी कॉम्पैटिबिलिटी क्रॉफ्ट और डेड प्रोजेक्ट्स को हटा देना। लेकिन मुझे लगता है कि परिपक्व सॉफ्टवेयर की प्रकृति है।


क्या तुमने कभी देखा कैसे जीटीके रिएक्टर Windows के तहत कार्यान्वित किया जाता है (कट्टर मतदान हर 10ms: अगर twistedmatrix.com/trac/browser/trunk/twisted/internet/... ), तो आप कहेंगे नहीं है कि "परिपक्व" ...
schlamar

2
हाय @schlamar। यह गंदा हैक जीटीके + में कुछ सुंदर गंभीर बगों के लिए एक वर्कअराउंड के रूप में लागू किया गया था, जिस दिन बिजली दक्षता के बारे में बहुत कम चिंता थी :)। लेकिन, ट्विस्टेड की सुंदरता यह है कि हम इस बग को एक बार पा सकते हैं , इसे फ्रेमवर्क में ठीक कर सकते हैं , और हमारे उपयोगकर्ताओं को इसके बारे में चिंतित होने की आवश्यकता नहीं है। क्या आप इस समस्या का समाधान करने वाले किसी सुधार में योगदान देना चाहते हैं और इससे छुटकारा पा लेते हैं (बाद में हटा देते हैं) PortableGtkReactor?
ग्लीफ जूल

1
@ ग्लिफ़ मैंने Twistedmatrix.com/trac/ticket/4744#comment:2 पर उपयोगी सलाह जोड़ी अगर कोई और इस मुद्दे से निपटना चाहता है, क्योंकि कुछ शोध के मुद्दे अभी भी मौजूद हैं। BTW, आप दो इवेंट लूप्स के बीच कॉलबैक शेड्यूल करके इसे और अधिक कुशलता से हल कर सकते थे।
श्लमर

7

कामेलिया का उल्लेख अभी तक नहीं किया गया है। इसका सुगम मॉडल, इनबॉक्स और आउटबॉक्स के बीच संदेश भेजने के साथ एक साथ वायरिंग पर आधारित है। यहाँ एक संक्षिप्त अवलोकन है।


5
मैंने एक ऐप के लिए कामेलिया का इस्तेमाल किया - यह बेहद दर्दनाक था। IMHO अन्य हैं, अजगर में समवर्ती के लिए बेहतर विकल्प (जिनमें से अधिकांश ऊपर उल्लिखित हैं)
बेन फोर्ड

7

मैंने कुछ चीजों के लिए मुड़ का उपयोग करना शुरू कर दिया है। इसकी सुंदरता लगभग इसलिए है क्योंकि यह "फूला हुआ" है। वहाँ किसी भी मुख्य प्रोटोकॉल के बारे में बस के लिए कनेक्टर्स हैं। आपके पास एक जैबर बॉट हो सकता है जो कमांड लेगा और एक irc सर्वर पर पोस्ट करेगा, उन्हें किसी को ईमेल करेगा, एक कमांड चलाएगा, एक NNTP सर्वर से पढ़ेगा, और परिवर्तनों के लिए एक वेब पेज की निगरानी करेगा। बुरी खबर यह है कि यह सब कर सकता है और ओपी द्वारा बताए गए सरल कार्यों के लिए चीजों को अत्यधिक जटिल बना सकता है। अजगर का लाभ हालांकि आप केवल वही शामिल करते हैं जिसकी आपको आवश्यकता है। इसलिए जब डाउनलोड 20mb हो सकता है, तो आप केवल 2mb पुस्तकालयों को शामिल कर सकते हैं (जो अभी भी बहुत कुछ है)। मेरी सबसे बड़ी शिकायत ट्विस्टेड है, हालांकि वे उदाहरणों में शामिल हैं, एक बुनियादी tcp सर्वर से परे कुछ भी आप अपने दम पर कर रहे हैं।

एक अजगर समाधान नहीं है, जबकि मैं नोड के रूप में देखा है। देर के रूप में एक बहुत अधिक कर्षण हासिल है। वास्तव में मैं इसे छोटी परियोजनाओं के लिए देख रहा हूं, लेकिन जब मैं जावास्क्रिप्ट को सुनता हूं तो मैं बस उखड़ जाता हूं :)


मैं एक बड़ा पायथन प्रशंसक हूं। - डगलस क्रॉकफोर्ड (3, 4 वीडियो) से "जावास्क्रिप्ट - अच्छे भाग" देखें। और CoffeeScript में झांकना। यह पता चला है कि जेएस के पास सिंटैक्स, हाहा को छोड़कर पायथन की चीजें होनी चाहिए। सीएस ने इसे कम करने की कोशिश की, लेकिन उस पर थोड़ा अनाड़ी है ...
रॉबर्ट सीमर

4

अबे फेटिग द्वारा इस विषय पर एक अच्छी पुस्तक है: "ट्विस्टेड नेटवर्क प्रोग्रामिंग एसेंशियल"। उदाहरण बताते हैं कि बहुत पाइथोनिक कोड कैसे लिखना है, और मेरे लिए व्यक्तिगत रूप से, एक प्रस्फुटित रूपरेखा के आधार पर मुझे हड़ताल न करें। पुस्तक में समाधान देखें, यदि वे साफ नहीं हैं, तो मुझे नहीं पता कि स्वच्छ का क्या मतलब है।

मेरी एकमात्र पहेली वही है जो अन्य रूबियों के साथ है, जैसे कि रूबी। मुझे चिंता है, क्या यह बड़े पैमाने पर है? मैं एक ढांचे के लिए एक ग्राहक के लिए घृणा करना होगा जो कि स्केलेबिलिटी की समस्या हो।


4

व्हिजर एक छोटे से अतुल्यकालिक सॉकेट ढांचे pyev उपयोग करता है। इसका बहुत तेज, मुख्य रूप से पाइव के कारण। यह कुछ मामूली परिवर्तनों के साथ मुड़ के रूप में एक परिचित इंटरफ़ेस प्रदान करने का प्रयास करता है।


2

इसके अलावा सिंक्रोनाइज करने की कोशिश करें । यह coroutine- आधारित है (इसलिए यह Concurrence, Eventlet और gevent के समान है)। यह socket.socket, socket.gethostbyname (आदि), ssl.SSLSocket, time.sleep और select.select के लिए ड्रॉप-इन नॉन-ब्लॉकिंग रिप्लेसमेंट को लागू करता है। ये तेज़ है। इसे स्टैकलेस पायथन और लिबवेंट की जरूरत है। इसमें C (Pyrex / Cython) में लिखा हुआ अनिवार्य पायथन विस्तार होता है।


2

मैं सिंकलेस की अच्छाई की पुष्टि करता हूं । यह libev (libevent का नया, क्लीनर और बेहतर प्रदर्शन संस्करण) का उपयोग कर सकता है। कुछ समय पहले इसका उतना समर्थन नहीं है जितना कि परिवाद का है, लेकिन अब विकास प्रक्रिया आगे बढ़ती है और बहुत उपयोगी होती है।


1

यदि आप केवल एक सरलीकृत, हल्के HTTP अनुरोध लाइब्रेरी चाहते हैं तो मुझे Unirest बहुत अच्छा लगता है


0

PyWorks पर एक नज़र डालने के लिए आपका स्वागत है, जो काफी अलग दृष्टिकोण लेता है। यह ऑब्जेक्ट इंस्टेंस को अपने थ्रेड में चलाता है और फ़ंक्शन कॉल को उस ऑब्जेक्ट को async बनाता है।

बस एक वर्ग को ऑब्जेक्ट के बजाय टास्क से विरासत में मिला है और यह async है, सभी तरीके कॉल प्रॉक्सी हैं। मान लौटाएँ (यदि आपको उनकी आवश्यकता है) फ्यूचर प्रॉक्सी हैं।

res = obj.method( args )
# code continues here without waiting for method to finish
do_something_else( )
print "Result = %d" % res # Code will block here, if res not calculated yet

PyWorks http://bitbucket.org/raindog/pyworks पर पाया जा सकता है


1
हालांकि यह दिलचस्प है और कुछ कार्यों के लिए उपयुक्त हो सकता है, नेटवर्किंग के लिए थ्रेड्स का उपयोग खराब करता है (विशेषकर जीआईएल के कारण पायथन पर)। और यह बिल्कुल सवाल था: एक घटनापूर्ण रूपरेखा या मल्टीप्रोसेसिंग के साथ। तो आपका जवाब स्पष्ट रूप से दायरे से बाहर है ...
schlamar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.