2013-06-18 24 views
5

在我正在工作的一個項目中,我需要覆蓋Tornado服務Behave,所以我想在運行每個場景之前啓動我的龍捲風服務實例。如何在Behave環境設置期間運行Tornado IO Loop

天真地試圖運行環路部分一切似乎鎖定excecution前:

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

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

回答

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

當我試圖在Windows上運行,我得到以下異常:'pickle.PicklingError:不能鹹菜<功能RUN_SERVER在0x000000000376B358>:它沒有發現如__main __ run_server' –

+0

聽起來像你' run_server'函數不可用。快速檢查是否可以實際導入'run_server'?即,如果它是一個lambda函數或者是一個到'before_all'的內部函數,它將不起作用。 – Xuan

+0

'run_server'的定義就像它在你的代碼示例中那樣;它在同一個文件中,就在'before_all'被定義之前。 –

相關問題