如何在行为环境设置期间运行Tornado IO Loop

时间:2013-06-18 18:06:41

标签: python bdd tornado

在我正在进行的项目中,我需要使用Tornado覆盖Behave服务,因此我想在运行每个方案之前启动龙卷风服务的实例。

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

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()

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

1 个答案:

答案 0 :(得分: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()