2015-03-16 8 views
5

मैं बोकेह-सर्वर निष्पादन योग्य का उपयोग कर Django के माध्यम से बोके दस्तावेजों की सेवा करने की कोशिश कर रहा हूं, जो टोरनाडो उदाहरण बनाता है। बोकेह दस्तावेजों को सत्र.object_link विधि द्वारा प्रदान किए गए यूआरएल के माध्यम से पहुंचा जा सकता है। जब पर नेविगेट, बोकेह-सर्वर निष्पादन stdout को यह लिखते हैं (आईपी पतों के अनेक बिंदुओं के साथ प्रतिस्थापित किया गया है):बोके सत्र और दस्तावेज़ मतदान

INFO:tornado.access:200 POST /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/gc (...) 222.55ms 
INFO:tornado.access:200 GET /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/ (...) 110.15ms 
INFO:tornado.access:200 POST /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/gc (...) 232.66ms 
INFO:tornado.access:200 GET /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/ (...) 114.16ms 

यह अजगर Django WSGI एप्लिकेशन चल उदाहरण के बीच संचार प्रतीत होता है (अपाचे चल रहा द्वारा प्रारंभ mod_wsgi) और बोके-सर्वर निष्पादन योग्य।

जब ब्राउज़र को बोके इंटरफ़ेस के लिए आवश्यक ग्राफ और डेटा इत्यादि सहित प्रतिक्रिया भेजी जाती है, ब्राउज़र में कुछ प्रारंभिक नेटवर्किंग होती है, इसके बाद नेटवर्किंग के बाद पाइथन कॉलबैक वाले ग्राफ के साथ कोई बातचीत होती है। जब उपयोगकर्ता विंडो या ब्राउज़र बंद कर देता है, तो ऊपर समान नेटवर्किंग जारी है। इसके अलावा, नेटवर्किंग केवल तब बंद हो जाती है जब Django या bokeh-server प्रक्रियाओं को मार दिया जाता है।

def get_bokeh_url(self, context): 
     t = Thread(target=self.run) 
     t.start() 

     return self.session.object_link(self.document.context) 

def run(self): 
    return self.session.poll_document(self.document) 

self.session और self.document दोनों धागा से पहले प्रारंभ गया:

आदेश में एक बोकेह सत्र शुरू और एक यूआरएल वापस Django टेम्पलेट को पारित करने के लिए यह एक नया सूत्र में बोकेह सत्र शुरू करने के लिए आवश्यक है आरंभ किया गया। तो उस बिंदु पर जहां get_bokeh_url कहा जाता है, दस्तावेज़ पर कुछ ग्राफ हैं, जिनमें से कुछ में इंटरैक्शन कॉलबैक हैं और सत्र बनाया गया है लेकिन poll_document (जो बातचीत के लिए आवश्यक प्रतीत होता है) के माध्यम से मतदान नहीं किया गया है।

थ्रेड तब तक चल रहा है जब तक कि आप या तो Django या bokeh-server को मार नहीं देते। इसका मतलब है कि जब अधिक अनुरोध आते हैं, तो अधिक धागे बनते हैं और नेटवर्किंग की मात्रा बढ़ जाती है।

मेरा सवाल यह है कि दस्तावेज अब ब्राउज़र में नहीं देखा जा रहा है, तो थ्रेड को मारने का कोई तरीका है?

एक जवाब है कि मैं विचार कर रहा है ब्राउज़र के बंद होने सर्वर के लिए एक त्वरित अनुरोध भेजने और किसी भी तरह उस दस्तावेज़ के लिए धागा को मारने के लिए किया जाएगा। मैंने बोके इंटरफ़ेस से दस्तावेज़ों को हटाने का प्रयास किया है, लेकिन इसका कोई प्रभाव नहीं है।

उत्तर

2

बोके सर्वर समय-समय पर जांच करता है कि सत्र में कनेक्शन हैं या नहीं। अगर कुछ समय के लिए कोई कनेक्शन नहीं है, तो सत्र समाप्त हो गया है और नष्ट हो गया है।

संस्करण 0.12.1, जांच अंतराल और 17 और 60 सेकंड में क्रमश: अधिकतम संयोजन समय चूक के रूप में। आप इस डॉक्स में खोजने के लिए नहीं बल्कि मुश्किल है इस

bokeh serve --check-unused-sessions 1000 --unused-session-lifetime 1000 app.py 

तरह सर्वर चलाकर उन्हें ओवरराइड कर सकते हैं, यह CLI documentation में और डेवलपर गाइड में सर्वर वास्तुकला अध्याय में वर्णित है एक section on Applications, Sessions and Connections में,। Periodic callbacks continue after tabs are closed #3770

आप जब भी एक सत्र नष्ट हो जाता है कस्टम तर्क की जरूरत है, अपने अनुप्रयोग के लिए directory deploy format का उपयोग करें और अपने Lifecycle Hooks युक्त एक server_lifecycle.py फ़ाइल जोड़ने के लिए, विशेष रूप से इस एक:

def on_session_destroyed(session_context): 
    ''' If present, this function is called when a session is closed. ''' 
    pass 
वहाँ भी इस विषय पर एक बंद कर दिया Github मुद्दा है
+1

FYI करें CLI डॉक्स अनुभाग, docstrings से स्वचालित रूप से उत्पन्न होता है आदि [एक Bokeh सर्वर चल रहा है] (http://bokeh.pydata.org/en/latest/docs/user_guide में इस जैसी चीजों के लिए कथा डॉक्स को जोड़ने के लिए एक पीआर/सर्वर।एचटीएमएल) यदि आपके पास मौका है तो अध्याय निश्चित रूप से सराहना की जाएगी। – bigreddot

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