Max threads Python和如何杀死线程?

Max threads Python和如何杀死线程?,python,multithreading,Python,Multithreading,我创建了一个守护进程,它创建了N个线程。N从1到500。 当线程结束处理数据时,它必须死亡。当线程启动时,创建日志文件并写入。当它死的时候-文件应该被移除。当线程启动其检查锁文件时。如果文件被删除,它应该是死的。但有时并非如此。为什么线程不会立即死亡 class HandlerWorker(threading.Thread): q_reader = None q_writer = None q_cmd = None id = '' task_id = 0

我创建了一个守护进程,它创建了N个线程。N从1到500。 当线程结束处理数据时,它必须死亡。当线程启动时,创建日志文件并写入。当它死的时候-文件应该被移除。当线程启动其检查锁文件时。如果文件被删除,它应该是死的。但有时并非如此。为什么线程不会立即死亡

class HandlerWorker(threading.Thread):
    q_reader = None
    q_writer = None
    q_cmd = None
    id = ''
    task_id = 0
    def __init__(self,id,task_id,q_reader,q_writer,q_cmd):
        '''
        Constructor
        '''
        #print "Worker %d started" % int(id)
        self.id = id
        self.task_id = task_id
        self.q_cmd = q_cmd
        self.q_reader = q_reader
        self.q_writer = q_writer
        threading.Thread.__init__(self)

    def __del__(self):
        print "Destroy worker %d %d" % (int(self.task_id),int(self.id))

    def isPid(self):
        is_pid = True
        try:
            cfg = ConfigReader('config.json')
            general = cfg.getGeneral()
            pidfile = "%s%d" % (str(general['pids']),int(self.task_id))
            f=open(pidfile,'r')
            f.close()
        except:
            is_pid = False
        return is_pid


    def run(self):
        '''
        Handle email
        '''
        is_run = True
        cfg = ConfigReader('config.json')
        general = cfg.getGeneral()
        logpath = str(general['pids'])+"../logs/%d_%d" % (int(self.task_id),int(self.id))
        f = open(logpath,"w+")
        while is_run:
            if not self.q_reader.empty():
                msg = self.q_reader.get()
                # convert message
                self.q_writer.put(msg)
                log_str = "Date: %s Email:%s Status:%d\n" % (str(time.asctime()),str(msg),int(status))
                f.write(log_str);
                f.flush()
            is_run = self.isPid()
            time.sleep(1)
        f.close()
        try:
            os.remove(logpath)
        except:
            print "Can't remove LOG file: %s" %logpath
        print "Stop thread %d %d" % (int(self.task_id),int(self.id))

假设您已将print语句放入isPid中,以查看openpidfile在文件存在时成功,而在您认为文件已被删除时失败?该文件是否位于本地非网络文件系统上?我将更具体地说:删除该文件后,您会看到什么?1 is_run为True,线程未挂起,2 is_run为False,线程未挂起,或者3 is_run分配未达到,因为转换消息挂起?