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

tut*_*uca 5 python bdd tornado

在我正在工作的项目中,我需要使用Behave来覆盖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()
Run Code Online (Sandbox Code Playgroud)

所以它可能不是我需要的.

Xua*_*uan 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()
Run Code Online (Sandbox Code Playgroud)