最大线程Python和如何杀死线程?

时间:2012-01-03 13:25:15

标签: python multithreading

我创建了一个创建N个线程的守护进程。 N beetwen 1 to 500。 当线程结束处理数据时,它必须死掉。当线程启动时,它创建日志文件并写入它。当它死亡 - 应该删除文件。线程启动时检查LOCK文件。如果删除文件,它应该死掉。但有时候不是。为什么线程不会死亡?

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))

0 个答案:

没有答案