如何在python中控制子线程?

时间:2010-03-15 01:48:31

标签: python multithreading twisted

代码优先:

'''this is main structure of my program'''

from twisted.web import http
from twisted.protocols import basic
import threading

threadstop = False    #thread trigger,to be done
class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        while True:
            if threadstop:
                return
            dosomething()


'''def some function'''

if __name__ == '__main__':
    from twisted.internet import reactor
    t = MyThread()
    reactor.listenTCP(serverport,myHttpFactory())
    reactor.run()

作为我的第一个多线程程序,我感到高兴它按预期工作。但现在我发现我无法控制它。如果我在前面运行它,Control + C只能停止主进程,我仍然可以在进程列表中找到它;如果我在后台运行它,我必须使用kill -9 pid来阻止它。我想知道是否有一种方法可以通过触发变量控制子线程,或者更好的方法来阻止除kill -9以外的整个过程。

2 个答案:

答案 0 :(得分:2)

使用atexit模块注册(在主线程中)将全局threadstop设置为True的功能,或者更简单地设置daemon属性线程对象为True,因此如果主线程退出,它将不会使进程保持活动状态。

答案 1 :(得分:2)

这不是您问题的直接答案,Alex已经解决了您的问题,但这是一个想法。

我看到你正在使用python的threading。您尝试使用twisted.internet.threads吗?

当我发现自己在twisted应用程序中使用线程时,我会转到twisted.internet.threads