我有一个 Sinatra 应用程序正在运行,并且有一些后台线程正在使用赛璐珞运行。当按下Ctrl+时C,我想干净地终止那些正在运行的代理。我如何干净地终止它们?
问问题
66 次
1 回答
1
要直接回答您的问题,您的主线程将在 Sinatra 运行时阻塞;一旦它捕获到 SIGINT,它就会跳出它的运行循环,并且你的脚本将继续。所以,你可以有一个像这样的 config.ru:
require './my_app'
run MyApp
Celluloid.shutdown
run
将阻塞直到服务器终止,此时赛璐珞应该启动其关闭机制。
然而,话虽如此,值得注意的是赛璐珞将#shutdown
通过一个at_exit
块自动调用。(https://github.com/celluloid/celluloid/blob/master/lib/celluloid.rb#L138-L154),并且赛璐珞已经提供了一种在演员退出时运行代码的机制,所以如果你已经为你的演员,他们应该干净地关闭,而无需你做任何特别的 WRT Sinatra。
于 2015-03-22T06:36:14.267 回答