强制CherryPy Child Threads

use*_*864 9 python multithreading cherrypy

好吧,我希望cherrypy在自动重载时杀死所有子线程,而不是"等待子线程终止",因为我的程序有自己的线程,我不知道如何通过它.CherryPy一直挂在那一行上,我不知道如何让"子线程"终止......

`

[05/Jan/2010:01:14:24] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) shut down
[05/Jan/2010:01:14:24] ENGINE Stopped thread '_TimeoutMonitor'.
[05/Jan/2010:01:14:24] ENGINE Bus STOPPED
[05/Jan/2010:01:14:24] ENGINE Bus EXITING
[05/Jan/2010:01:14:24] ENGINE Bus EXITED
[05/Jan/2010:01:14:05] ENGINE Waiting for child threads to terminate...
Run Code Online (Sandbox Code Playgroud)

`

它永远不会继续..所以我想强迫孩子线程关闭...

我知道这是因为我的应用程序正在使用它自己的线程,我想cherrypy希望这些线程与CherryPy一起退出....我可以克服这个吗?

fum*_*chu 11

您需要编写用于停止线程的代码,并将其注册为"stop"事件的侦听器:

from cherrypy.process import plugins

class MyFeature(plugins.SimplePlugin):
    """A feature that does something."""

    def start(self):
        self.bus.log("Starting my feature")
        self.threads = mylib.start_new_threads()

    def stop(self):
        self.bus.log("Stopping my feature.")
        for t in self.threads:
            mylib.stop_thread(t)
            t.join()

my_feature = MyFeature(cherrypy.engine)
my_feature.subscribe()
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://www.cherrypy.org/wiki/BuiltinPluginshttp://www.cherrypy.org/wiki/CustomPlugins.

  • 当然; 你可以把代码放在任何你喜欢的地方; 唯一重要的是你在运行quickstart之前订阅它. (2认同)