【发布时间】:2012-08-13 18:53:54
【问题描述】:
我正在用 python 编写一个 Web 应用程序,并使用 lettuce 和 splinter 为其编写验收测试。
为了做到这一点,我需要一个 wsgi 服务器在后台启动我的应用程序,以便该应用程序可用于我的测试套件。为此,我一直在另一个线程中启动一个女服务员服务器实例,以便驱动连接到的浏览器:
def setUp():
base = os.path.dirname(__file__) + "/../../.."
world.app = loadapp('config:test.ini', relative_to=base)
world.server_thread = thread.start_new_thread(serve_app, (world.app,))
def serve_app(app):
serve(app, host='0.0.0.0', port=7654)
这很好用 - 我的测试套件可以使用正在运行的应用程序实例来设置固定装置/模拟等,并且我的测试可以连接到服务器。但是,当测试完成时,我无法向服务器发送信号以彻底关闭自身。因此,无论如何,我是否可以以某种方式将KeyboardInterrupt 发送到我生成的服务器线程(这将被女服务员捕获并提示它干净地关闭),或者如果失败,是否存在暴露的现有 wsgi 服务器实现我可以使用非阻塞 start() 和 stop() 方法来代替女服务员吗?
【问题讨论】:
-
你可能不应该直接使用
thread(在Python 3中它被重命名为_thread)。您可以改用threading模块。