2012-11-22 14 views
8

जब किसी भी थ्रेड के अंदर किसी अपवाद को उठाए बिना अपवाद उठाया जाता है, तो क्या यह पूरे एप्लिकेशन/दुभाषिया/प्रक्रिया को मार देगा? या यह केवल धागे को मार डालेगा?क्या इन-थ्रेड बेजोड़ अपवाद केवल थ्रेड या पूरी प्रक्रिया को मारता है?

+0

क्या आपने एक थ्रेड बनाने की कोशिश की है जो अपवाद फेंकता है? – mbatchkarov

उत्तर

11

की यह कोशिश करते हैं:

import threading 
import time 

class ThreadWorker(threading.Thread): 

    def run(self): 
     print "Statement from a thread!" 
     raise Dead 


class Main: 

    def __init__(self): 
     print "initializing the thread" 
     t = ThreadWorker() 
     t.start() 
     time.sleep(2) 
     print "Did it work?" 


class Dead(Exception): pass 



Main() 

कोड ऊपर निम्नलिखित परिणाम प्राप्त होते हैं:

> initializing the thread 
> Statement from a thread! 
> Exception in thread 
> Thread-1: Traceback (most recent call last): File 
> "C:\Python27\lib\threading.py", line 551, in __bootstrap_inner 
>  self.run() File ".\pythreading.py", line 8, in run 
>  raise Dead Dead 
> ----- here the interpreter sleeps for 2 seconds ----- 
> Did it work? 

तो, आपके सवाल का जवाब है कि एक उठाया अपवाद केवल धागा दुर्घटनाओं यह पूरे कार्यक्रम में नहीं है।

+0

मैं समवर्ती थ्रेड पूल का उपयोग कर रहा हूं। यदि एक थ्रेड मारा गया तो थ्रेड पूल में एक नया धागा उग जाएगा या नहीं ??? –

5

threading प्रलेखन से:

एक बार धागा की गतिविधि शुरू कर दिया है, धागा माना 'जिंदा' है। यह जीवित होने पर रोकता है जब इसकी रन() विधि समाप्त होती है - या तो सामान्य रूप से, या एक अनचाहे अपवाद उठाकर। Is_alive() विधि परीक्षण करता है कि धागा जीवित है या नहीं।

और यह भी:

में शामिल होने के (टाइमआउट = कोई नहीं)

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

दूसरे शब्दों में, बेकार अपवाद थ्रेड को समाप्त करने का एक तरीका है, और माता-पिता के join में कहा गया थ्रेड पर कॉल किया जाएगा।

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