在Python Twisted线程中使用Cmd模块

时间:2013-12-25 22:59:48

标签: python multithreading cmd twisted

请参阅此question,我需要运行一个Cmd控制台应用程序,该应用程序将使用Python的Twisted框架进行网络查询,并使用以下示例:

from cmd import Cmd
from twisted.internet import reactor

class CommandProcessor(Cmd):
    def do_quit(self, line):
        print 'bye bye !'
        return True

    def do_hello(self, line):
        print 'world'

if __name__ == "__main__":
    reactor.callInThread(CommandProcessor().cmdloop)
    reactor.run()

一切都很好用,但是当执行退出命令时,控制台会挂起,直到我按下Ctrl + c,如果我在执行退出之前按下Ctrl + c,则相同控制台也会挂起,直到我执行退出命令。

当我从 CommandProcessor()。cmdloop 退出时,似乎反应堆仍在工作,如果这是问题,我需要一种方法在我的线程结束时停止反应堆。

1 个答案:

答案 0 :(得分:2)

调用reactor.stop以终止扭曲事件循环。 CommandProcess.do_quit在一个单独的线程中运行;应使用reactor.callFromThread

调用reactor.stop

reactor.callFromThread(reactor.stop)方法中添加do_quit

def do_quit(self, line):
    print 'bye bye !'
    reactor.stop() # <------
    return True