Python 如何在Behave环境设置期间运行Tornado IO循环
在我正在工作的项目中,我需要介绍一个服务,所以我想在运行每个场景之前启动我的tornado服务的一个实例 天真地尝试将循环作为一部分运行,似乎锁定了执行:Python 如何在Behave环境设置期间运行Tornado IO循环,python,bdd,tornado,Python,Bdd,Tornado,在我正在工作的项目中,我需要介绍一个服务,所以我想在运行每个场景之前启动我的tornado服务的一个实例 天真地尝试将循环作为一部分运行,似乎锁定了执行: from tornado import ioloop from tornadoadapter.applications import APPLICATION def before_all(context): print "Service running on port 8000" APPLICATION.listen(80
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()
所以这可能不是我需要的。您的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()
当我尝试在Windows上运行此操作时,会出现以下异常:
pickle.PicklingError:无法pickle:找不到它作为_umain__;。运行服务器
听起来像是您的运行服务器
函数不可拾取。要快速检查的是,您是否可以实际导入运行\u服务器
?i、 e.如果是lambda或内部函数,则在所有之前执行,它将不起作用。运行服务器
的定义与代码示例中的定义相同;它在同一个文件中,就在定义\u all
之前。