Max threads Python和如何杀死线程?
我创建了一个守护进程,它创建了N个线程。N从1到500。 当线程结束处理数据时,它必须死亡。当线程启动时,创建日志文件并写入。当它死的时候-文件应该被移除。当线程启动其检查锁文件时。如果文件被删除,它应该是死的。但有时并非如此。为什么线程不会立即死亡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
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分配未达到,因为转换消息挂起?