2009-05-11 14 views
12

का उपयोग करके मैं सरल थ्रेडिंग पर एक ट्यूटोरियल का अनुसरण कर रहा हूं। वे यह उदाहरण देते हैं और जब मैं इसका उपयोग करने की कोशिश करता हूं तो मुझे दुभाषिया से अनजान त्रुटियां मिल रही हैं। क्या आप कृपया मुझे बता सकते हैं कि यह क्यों काम नहीं कर रहा है? मैं WinXP SP3 डब्ल्यू/अजगर 2.6 वर्तमानपायथन 2.6 में सरल थ्रेडिंग thread.start_new_thread()

import thread 

def myfunction(mystring,*args): 
    print mystring 


if __name__ == '__main__': 

    try: 

     thread.start_new_thread(myfunction,('MyStringHere',1)) 

    except Exception as errtxt: 
     print errtxt 

निष्पादित इस परिणाम पर हूँ में ::

सूत्र में

क्रिया के अपवाद sys.excepthook में त्रुटि द्वारा शुरू किया:

मूल अपवाद था:

त्रुटि में अनुपलब्ध जानकारी वास्तव में आउटपुट में अनुपलब्ध है।

+0

2.6 ipython – millimoose

+5

थ्रेड मॉड्यूल में मेरे लिए काम किया "जटिल थ्रेडिंग" है। सरल थ्रेडिंग इसके बजाय "थ्रेडिंग" मॉड्यूल का उपयोग करेगा। – nosklo

उत्तर

-1

मैं

except Exception, errtxt: 

कार्यक्रम के लिए पर एक मैक अजगर 2.5 में यह कोशिश की,

except Exception as errtxt: 

बदलने के बाद एक अपवाद फेंक नहीं था, लेकिन यह भी कुछ भी प्रिंट नहीं किया। यह सुनिश्चित नहीं है कि यह सहायक है, लेकिन मुझे यह उत्सुक लगता है ...

+0

यहां तक ​​कि पूरी तरह से कोशिश/निकालने के खंड को हटाकर, उसी त्रुटि को उत्पन्न करता है –

-1

जब मैंने पाइथन 2.6 में यह कोड चलाया तो यह काम करता था, क्या यह संभव है कि आपके पास पहले से ही खुले थ्रेड हैं जो फ़ंक्शन पर लॉक हैं? मैं पूरी तरह से पाइथन बंद करने की सलाह देता हूं, यह सुनिश्चित करने के लिए कि आपकी कोई भी चीज़ नहीं चल रही है और फिर से प्रयास करें, अपनी चल रही प्रक्रियाओं की जांच करें।

+0

मैंने अपना संपादक (विंगइड समर्थक) बंद कर दिया और किसी भी अपरिचित प्रक्रियाओं को मार दिया, वही त्रुटियां :( –

+0

आईडीएलई में कोड चिपकाने की कोशिश करें (जब आप GUI संपादक प्रदान करते हैं पाइथन के विंडोज संस्करण को डाउनलोड करें)। देखें कि क्या आपके पास अभी भी एक ही समस्या है। – AlbertoPL

24

समस्या यह है कि आपके मुख्य धागे को समाप्त होने से पहले आपका मुख्य धागा छोड़ दिया गया है। समाधान आपके मुख्य धागे पर इंतजार करना है।

import thread, time 

def myfunction(mystring,*args): 
    print mystring 


if __name__ == '__main__': 

    try: 

     thread.start_new_thread(myfunction,('MyStringHere',1)) 

    except Exception, errtxt: 
     print errtxt 

    time.sleep(5) 

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

from threading import Thread 

def myfunction(mystring,*args): 
    print mystring 


if __name__ == '__main__': 

    try: 
     Thread(target=myfunction, args=('MyStringHere',1)).start() 
    except Exception, errtxt: 
     print errtxt 
+0

क्या होगा यदि थ्रेड 5 सेकंड में बाहर नहीं निकलता है? आपको अपवाद मिला है ... – ismail

+0

@ कार्टमैन आपने मेरा जवाब चुरा लिया और आपने भी परेशान नहीं किया इसका परीक्षण करने के लिए। थ्रेडिंग मॉड्यूल से थ्रेड क्लास को इसे समाप्त करने के लिए इंतजार करने के लिए मुख्य धागे की आवश्यकता नहीं है ....... – Unknown

+2

अपना उत्तर चुरा लिया? जवाब में शामिल होना है() और आप इसे नहीं कर रहे हैं: -) – ismail

16

जब तक आपकी थ्रेड अपना काम खत्म प्रतीक्षा करने की आवश्यकता है, तो आप Thread.join() का उपयोग करने के लिए है:

from threading import Thread 

def myfunction(mystring,*args): 
    print mystring 

if __name__ == '__main__': 

    try: 
     t = Thread(None,myfunction,None,('MyStringHere',1)) 
     t.start() 
     t.join() 
    except Exception as errtxt: 
     print errtxt 
0
import thread 

def myfunction(mystring,*args): 
    print mystring 

if __name__ == '__main__': 

    try: 

     thread.start_new_thread(myfunction,('MyStringHere',1)) 

    except Exception as errtxt: 
     print errtxt 

while 1: 
    pass 

आखिरकार लूप रखें, तो यह आपके लिए काम करेगा।

+0

आखिरकार लूप के दौरान रखेगा तो यह आपके लिए काम करेगा – user3021191

+2

यह मेरे लिए काम करता है, धन्यवाद, लेकिन क्या आप इसके लिए कुछ स्पष्टीकरण दे सकते हैं? –

+0

धागा समाप्त होने पर आप इसे कैसे रोकेंगे? – thebeancounter

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