2011-06-12 9 views
12

मुझे कक्षा को परिभाषित करने के लिए अनावश्यक रेखा के बिना फ़ंक्शन को थ्रेड में बदलने की क्षमता पसंद आई। मुझे _thread के बारे में पता है, हालांकि ऐसा प्रतीत होता है कि आपको _thread का उपयोग नहीं करना चाहिए। क्या Python 3 के लिए thread.start_new_thread के बराबर एक अच्छा अभ्यास है?python में thread.start_new_thread के साथ क्या हुआ 3

उत्तर

21
threading.Thread(target=some_callable_function).start() 

या आप तर्क पारित करने के लिए,

threading.Thread(target=some_callable_function, 
     args=(tuple, of, args), 
     kwargs={'dict': 'of', 'keyword': 'args'}, 
    ).start() 
+0

मैं थ्रेड पर एक तर्क पारित करने के लिए विधि 2 का उपयोग कर रहा हूं, और त्रुटि प्राप्त कर रहा हूं: तर्क के बाद * अनुक्रम होना चाहिए, न कि। क्या आप इसका मतलब जानते है? – lemiant

+4

सुनिश्चित करें कि आप '(firstarg,)' not '(firstarg) 'गुजर रहे हैं - याद रखें कि सिंगल-एलिमेंट टुपल्स को पिछली कॉमा को टुपल के रूप में व्याख्या करने की आवश्यकता है। – Amber

+0

कॉल करने योग्य विधि हस्ताक्षर कैसा दिखता है? अगर मैं 'कॉल करने योग्य (** kwargs) जैसे कुछ का उपयोग करता हूं:' मुझे 'TypeError मिलता है: कॉल करने योग्य() 0 स्थितित्मक तर्क लेता है लेकिन 1 दिया गया था, और यदि मैं 'कॉल करने योग्य (kwargs) का उपयोग करता हूं:' मुझे' TypeError: कॉल करने योग्य () एक अप्रत्याशित कीवर्ड तर्क 'कच्चा' मिला। – henrikstroem

3

दुर्भाग्य से, एक प्रत्यक्ष बराबर नहीं है क्योंकि अजगर 3 अजगर 2 की तुलना में अधिक पोर्टेबल करने के लिए है और _thread इंटरफेस भी माना जा रहा है चाहते हैं इस उद्देश्य के लिए निम्न स्तर।

पायथन 3 में आमतौर पर threading.Thread(target=f...) का उपयोग करने का सबसे अच्छा अभ्यास होता है। यह विभिन्न अर्थशास्त्र का उपयोग करता है, लेकिन इसे प्राथमिकता दी जाती है क्योंकि इंटरफ़ेस अन्य पायथन कार्यान्वयन के लिए बंदरगाह के लिए आसान है।

संबंधित मुद्दे