2013-06-18 3 views
5

एक परियोजना में मैं काम कर रहा हूं, मुझे Tornado सेवा Behave के साथ कवर करने की आवश्यकता है, इसलिए मैं प्रत्येक परिदृश्य को चलाने से पहले अपनी टर्ननाडो सेवा का एक उदाहरण शुरू करना चाहता हूं।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() 

तो यह शायद मैं क्या जरूरत नहीं है:

भोलेपन से पहले सभी निष्पादन लॉक करने के लिए लगता है हिस्से के रूप में पाश को चलाने के लिए कोशिश कर रहा।

उत्तर

3

आपका आईओएलओओपी मुख्य धागे में चल रहा है, इसलिए यह अवरुद्ध हो रहा है। आप इसे एक अलग थ्रेड या प्रक्रिया में कर सकते हैं।

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

जब मैं विंडोज पर इस चलाने का प्रयास, मैं निम्नलिखित अपवाद: 'pickle.PicklingError: नहीं <समारोह run_server 0x000000000376B358 पर> अचार सकता है:। यह नहीं मिला के रूप में __main है __ –

+0

की तरह लगता है run_server' अपने' run_server' फ़ंक्शन पिकलेबल नहीं है। जांचने के लिए त्वरित बात यह है कि क्या आप वास्तव में 'run_server' आयात कर सकते हैं? यानी अगर यह लैम्बडा या आंतरिक कार्य 'पहले_ल'' है तो यह काम नहीं करेगा। – Xuan

+0

'run_server' को परिभाषित किया गया है जैसे यह आपके कोड नमूने में है; यह उसी फ़ाइल में है, ठीक पहले 'pre_all' परिभाषित किया गया है। –

संबंधित मुद्दे