5

在我正在工作的项目中,我需要使用Behave覆盖Tornado服务,因此我想在运行每个场景之前启动我的 tornado 服务实例。

天真地试图在一切似乎锁定执行之前将循环作为一部分运行:

from tornado import ioloop
from tornadoadapter.applications import APPLICATION


def before_all(context):
    print "Service running on port 8000"
    APPLICATION.listen(8000)
    ioloop.IOLoop.instance().start()

所以这可能不是我需要的。

4

1 回答 1

3

您的 IOLoop 正在主线程中运行,因此它处于阻塞状态。您可以在单独的线程或进程中执行此操作。

from multiprocessing import Process

from tornado import ioloop
from tornadoadapter.applications import APPLICATION


def run_server():
    print "Service running on port 8000"
    APPLICATION.listen(8000)
    ioloop.IOLoop.instance().start()


def before_all(context):
    context.server_thread = Process(target=run_server)
    context.server_thread.deamon = True
    context.server_thread.start()
于 2014-07-30T21:21:17.990 回答