2013-01-08 11 views
7

पर गहराई से मारना मैं कुछ संसाधन लाने के लिए एपीएसड्यूलर (जो थ्रेड पूल का उपयोग करता है) का उपयोग करने वाली एक प्रणाली को कार्यान्वित कर रहा हूं।uWSGI और मल्टीथ्रेडेड फ्लास्क ऐप को

मैं "ऐप पुनरारंभ" का पता लगाने का एक तरीका जानने का प्रयास कर रहा हूं ताकि मैं एपीएसड्यूलर थ्रेड पूल को बंद कर सकूं। मैं uWSGI मास्टर प्रक्रिया में SIGHUP भेजकर पुनरारंभ कर रहा हूं।

क्या किसी ने इनमें से किसी एक की कोशिश की है? यदि हां, तो ऐप पुनरारंभ ईवेंट का पता लगाने का सही तरीका क्या है? तो मेरे धागे चलाने लेकिन uWSGI अनुरोधों की सेवा नहीं है

  • uwsgidecoratorspostfork डेकोरेटर है,
  • uwsgi मॉड्यूल signal_wait और signal_received कार्यों

signal_wait समारोह ब्लॉक हैं। मैंने scheduler.daemonic को गलत और सही करने की भी कोशिश की है - यह किसी भी तरह से मदद नहीं करता है।

worker 1 (pid: 20082) is taking too much time to die...NO MERCY !!!

उत्तर

1

मैं "एप्लिकेशन को पुनः आरंभ" पता लगाने के लिए इतना है कि मैं APScheduler थ्रेड पूल को बंद करने में सक्षम हो जाएगा एक तरह से यह पता लगाने की कोशिश कर रहा हूँ: uWSGI प्रक्रिया अभी भी कुछ इस तरह लॉग करता है।

मुझे लगता है कि निश्चित रूप से एप्लिकेशन पुनः आरंभ पता लगाने के लिए आसान तरीका नहीं है, लेकिन uwsgi पुनः लोड के बाद कोड निष्पादित या बंद, इन तरीकों से कर सकते हैं:

1) कोड अलग प्रक्रिया में निष्पादित करेंगे: जोड़ने हुक के रूप में उपयोगकर्ता के atexit अपने uwsgi config को:

012:

[uwsgi] 
... 
hook-as-user-atexit = exec:python finalization.py 

2) कार्यकर्ताओं में से एक में लागू किया जाएगा

3) इस मामले में आपको touch uwsgi.pid के माध्यम से पुनः लोड करना चाहिए। मजदूरों में से एक में सक्रिय किया जाएगा केवल पुनः लोड के बाद:

[uwsgi] 
... 
pidfile = ./uwsgi.pid 
touch-reload = ./uwsgi.pid 

अजगर कोड:

import uwsgi 

def will_executed_after_reload(*args): 
    print("I was invoked") 

uwsgi.register_signal(17, "worker", will_executed_after_reload) 
uwsgi.add_file_monitor(17, "./uwsgi.pid") 
संबंधित मुद्दे