मैं इन सभी तरीकों का उपयोग नहीं किया, हालांकि मैं उन सब को एक बिंदु या किसी अन्य पर जांच की है ...
अजगर सी एपीआई: सी कोड है कि एक अजगर मॉड्यूल में आयात किया जा सकता करने के लिए संकलित लिखने के लिए अजगर। या एक पायथन मॉड्यूल लिखने के लिए जो कुछ सी पुस्तकालय के साथ इंटरफ़ेस के लिए "गोंद" कोड के रूप में कार्य करता है।
scipy.weave: आप, यदि आप सांख्यिक काम करने के लिए NumPy और SciPy का उपयोग कर रहे हैं, अपने अजगर कोड में सी कोड के टुकड़े को गिरवी रखना इस पर विचार करने देता है। सी कोड एक स्ट्रिंग के रूप में होगा, जैसे, weave.inline ('printf ("% s", foo)') उदाहरण के लिए।
ctypes: एक पायथन मॉड्यूल जो आपको अपने पायथन कोड से सी कोड में कॉल करने की अनुमति देता है। आप मूल रूप से साझा लाइब्रेरी आयात करते हैं और उसके एपीआई में कॉल करते हैं। कुछ कॉल उन कॉलों के अंदर और बाहर डेटा को मार्शल करने के लिए आवश्यक हैं। यदि आप मौजूदा सी लाइब्रेरी का उपयोग कर रहे हैं जिसे आपने या किसी और ने लिखा है, तो मैं यहां शुरू करूंगा।
pyrex/cython: आप अजगर कोड है कि सी कोड में उत्पन्न हो जाएगा (जो एक पायथन मॉड्यूल के रूप में आयात किया जा सकता है) और, जाहिर है, तेजी से चलाने के (कुछ विशेष सिंटैक्स का उपयोग) लिखने देता है कि उसे चलाया गया था पायथन दुभाषिया के माध्यम से। यह "पायथन सी एपीआई" मार्ग की तरह है, केवल यह आपके लिए सी कोड उत्पन्न करता है। उपयोगी अगर आपके पास कोड का कुछ हिस्सा है जो आपकी बाधा है और वास्तव में धीमी है। सिथन का उपयोग करके उस समारोह को फिर से लिखें और इसे कॉलिंग कोड से आयात करें।
SWIG: सी/सी ++ लाइब्रेरी के लिए रैपर कोड जेनरेट करता है। आपको एक पायथन मॉड्यूल के साथ समाप्त होना चाहिए जिसे आप आयात और उपयोग कर सकते हैं।
बूस्ट। पायथन: यह वह है जिसे मैं कम से कम जानता हूं। मुझे लगता है कि यह SWIG के समान है हालांकि आप स्वयं रैपर परत लिखते हैं, लेकिन बूस्ट मैक्रोज़/फ़ंक्शंस से बहुत मदद के साथ।
साइको: आपके पायथन कोड को थोड़ा बढ़ाता है, मुझे इसके साथ बहुत भाग्य नहीं मिला है। मैं इसके साथ अपना समय बर्बाद नहीं करूंगा। अपना कोड प्रोफाइल करें, अपनी बाधाओं को ढूंढें और उपरोक्त तकनीकों में से किसी एक का उपयोग करके उन्हें गति दें।
-1। यह सवाल अत्यधिक व्यापक है। –
@ स्टेवेन रूंबास्की: मैं असहमत हूं। यह एक अच्छा सवाल है, हालांकि मुझे लगता है कि मुझे यह जानना अच्छा लगेगा कि उपयोगकर्ता ने वास्तव में * कोशिश की है *। –
@ प्लैटिनम अज़ूर: मैंने -1 पर थोड़ा सा झुकाया, लेकिन आखिरकार फैसला किया कि इस प्रश्न का एक अच्छा जवाब वास्तव में लंबा और विस्तृत होना होगा। यह काफी हद तक व्यक्तिपरक होगा। –