以下是横跨几个线程Python应用程序,然后派生的本身和出口的新工艺:为什么线程在应用程序退出后继续运行?
from pprint import pprint import os
import random
import signal
import sys
import threading
import time
class Name(object):
def __init__(self, name):
self.name = name
class CallThreads(threading.Thread):
def __init__(self, target, *args):
self.target = target
self.args = args
threading.Thread.__init__(self)
def run (self):
self.target(*self.args)
def main(args):
print("Hello, world!")
letter = random.choice(['A', 'B', 'C', 'D', 'E', 'F'])
count = 0
while count<3:
count += 1
name = Name(letter+str(count))
t = CallThreads(provider_query, name)
t.daemon = True
t.start()
time.sleep(3)
print("------------")
print("Time to die!")
os.system('python restart.py')
sys.exit(0)
def provider_query(name):
while name.name!='':
print(name.name)
time.sleep(1)
def signal_handler(signal, frame):
sys.exit()
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
main(sys.argv)
我想到的是,进程退出后,与之相关的线程将停止运作。但是,在Kubuntu Linux上运行上述程序会告诉我这些进程会继续运行,即使在应用程序退出并产生了新进程之后。我看到这个线程继续输出到标准输出。即使我注释掉daemon
行,这些过程仍会继续运行。
为什么进程在sys.exit()
被调用后继续运行,我该如何让它们停止?这个问题发生在Kubuntu Linux 12.10中的Python 2.7和Python 3.2上。
'restart.py'是做什么用的?你确定你看到的输出不是来自那里吗? – interjay