मैं फ्लास्क के लिए uWSGI + django autoreload mode जैसे कुछ ढूंढ रहा हूं।फ्लास्क + uWSGI के साथ ऑटोरेलोड कैसे सेट करें?
उत्तर
आप अपने Uwsgi अनुप्रयोग के लिए एक प्रबंधक के रूप में supervisord उपयोग करने का प्रयास कर सकता है। इसमें एक घड़ी का कार्य भी होता है जो एक फ़ाइल या फ़ोल्डर को "स्पर्श"/संशोधित किया गया है जब एक प्रक्रिया को स्वत: पुनः लोड करता है।
आप यहाँ एक अच्छा ट्यूटोरियल मिलेगा: Flask+NginX+Uwsgi+Supervisord
मुझे डर है कि फ्लास्क वास्तव में बहुत ही बेकार हड्डियों को कार्यान्वित करने के लिए डिफ़ॉल्ट रूप से इस तरह के कार्यान्वयन के लिए है।
गतिशील रूप से पुन: लोड उत्पादन में कोड आम तौर पर एक बुरी बात है, लेकिन अगर आप एक देव पर्यावरण के बारे में चिंतित हैं, इस bash खोल स्क्रिप्ट पर एक नज़र डालें http://aplawrence.com/Unixart/watchdir.html
बस नींद अंतराल जो कुछ भी करने के लिए अपनी आवश्यकताओं और विकल्प सूट बदलने uwsgi को पुनः लोड करने के लिए जो भी आप उपयोग करते हैं, उसके साथ echo कमांड। मैं uwsgi un मास्टर मोड चलाता हूं और बस एक killall uwsgi कमांड भेजता हूं।
विकास-मोड फ्लास्क की ऑटो-रीलोडिंग कार्यक्षमता वास्तव में अंतर्निहित वर्कज़ग लाइब्रेरी द्वारा प्रदान की जाती है। प्रासंगिक कोड werkzeug/serving.py
में है - इसे देखने के लायक है। लेकिन मूल रूप से, मुख्य अनुप्रयोग WSGI सर्वर को एक उपप्रोसेस के रूप में उत्पन्न करता है जो प्रत्येक सक्रिय .py
प्रति सेकंड एक बार फ़ाइल को बदलता है, परिवर्तनों की तलाश करता है। यदि यह किसी को देखता है, तो सबप्रोसेस निकलता है, और अभिभावक प्रक्रिया इसे फिर से शुरू करती है - असल में पिंजरों को फिर से लोड करना।
कोई कारण नहीं है कि आप uWSGI की परत पर एक समान तकनीक को लागू नहीं कर पाएंगे। यदि आप एक स्टेट लूप का उपयोग नहीं करना चाहते हैं, तो आप अंतर्निहित ओएस फ़ाइल-घड़ी कमांड का उपयोग करने का प्रयास कर सकते हैं। जाहिर है (वेर्कज़ुग के कोड के अनुसार), pyinotify छोटी गाड़ी है, लेकिन शायद Watchdog काम करता है? कुछ चीजों को आज़माएं और देखें कि क्या होता है।
संपादित करें:
टिप्पणी के जवाब में, मुझे लगता है कि इस reimplement लिए बहुत आसान हो जाएगा। werkzeug/serving.py
से, आपके लिंक से प्रदान उदाहरण पर बिल्डिंग कोड के साथ:
""" NOTE: _iter_module_files() and check_for_modifications() are both
copied from Werkzeug code. Include appropriate attribution if
actually used in a project. """
import uwsgi
from uwsgidecorators import timer
import sys
import os
def _iter_module_files():
for module in sys.modules.values():
filename = getattr(module, '__file__', None)
if filename:
old = None
while not os.path.isfile(filename):
old = filename
filename = os.path.dirname(filename)
if filename == old:
break
else:
if filename[-4:] in ('.pyc', '.pyo'):
filename = filename[:-1]
yield filename
@timer(3)
def check_for_modifications():
# Function-static variable... you could make this global, or whatever
mtimes = check_for_modifications.mtimes
for filename in _iter_module_files():
try:
mtime = os.stat(filename).st_mtime
except OSError:
continue
old_time = mtimes.get(filename)
if old_time is None:
mtimes[filename] = mtime
continue
elif mtime > old_time:
uwsgi.reload()
return
check_for_modifications.mtimes = {} # init static
यह untested है, लेकिन काम करना चाहिए।
युक्तियों के लिए धन्यवाद! मैंने werkzeug.serving के माध्यम से थोड़ा सा देखा था, लेकिन उम्मीद थी कि मैं जल्दी से पूछने के लिए अपने हाथ गंदे होने से बच सकता हूं ... हो सकता है कि यह किसी के समय लागू हो। :) – Florian
import gevent.wsgi
import werkzeug.serving
@werkzeug.serving.run_with_reloader
def runServer():
gevent.wsgi.WSGIServer(('', 5000), app).serve_forever()
(आप एक मनमाना WSGI सर्वर का उपयोग कर सकते हैं)
दुर्भाग्यवश यह मेरे प्रश्न का उत्तर नहीं है। मैं सेवा करने के लिए uwsgi चाहता हूँ। बीटीडब्ल्यू: फ्लास्क का app.run (डीबग = ट्रू) बॉक्स से पुनः लोडिंग प्रदान करता है। – Florian
हालांकि देव। फ्लास्क के साथ भेजे गए वेबसर्वर को पुनः लोड करने की सुविधा मिलती है, यह डिबगिंग के लिए एक खोल भी प्रदान करता है! आप उत्पादन में हर किसी के लिए एक अजगर खोल नहीं देना चाहते हैं! – Jabba
विकास के वातावरण के लिए आप --python-autoreload uwsgi के पैरामीटर का उपयोग करने की कोशिश कर सकते हैं। स्रोत कोड को देखते हुए यह केवल थ्रेडेड मोड (--enable-threads) में काम कर सकता है।
यह मेरे लिए काम करता है। मेरी 'uwsgi.ini' फ़ाइल में' पायथन-ऑटोरेलोड = 1' जोड़ना इसे पुनः लोड करने के लिए मिलता है! धन्यवाद! – JoshFinnie
uwsgi सम्राट मोड का उपयोग करना - यह ऐप के आईएनआई में जोड़कर काम करता है। धन्यवाद! –
मुझे लगता है कि यह ध्यान देने योग्य है कि मान '1' और' true' * * अदला-बदले नहीं हैं। केवल '1' मेरे लिए काम करता है। – kungphu
मैं uwsgi संस्करण 1.9 चला रहा हूं।5 और विकल्प
uwsgi --py-autoreload 1
काम करता है महान
अच्छी पकड़। --help आउटपुट में सूचीबद्ध नहीं है। धन्यवाद! – user237419
uwsgi सम्राट मोड का उपयोग, सम्राट प्रक्रिया लॉन्च और न ही व्यक्तिगत ऐप इनआई कॉन्फ़िगरेशन के लिए काम करता है। पूर्व "अज्ञात विकल्प" देता है, बाद में कुछ भी नहीं देता है। किसी भी तरह से, प्रक्रियाओं को ध्यान में रखे जाने के लिए प्रक्रिया को पुनरारंभ करना होगा ... –
मैं uwsgi --py-autoreload 1 कैसे चला सकता हूं – Burf2000
आप आदेश तर्क के साथ uwsgi
को विन्यस्त कर रहे हैं, पारित --py-autoreload=1
: आप uwsgi
कॉन्फ़िगर करने के लिए एक .ini
फ़ाइल का उपयोग और उपयोग कर रहे हैं
uwsgi --py-autoreload=1
uwsgi --ini
, अपनी .ini
फ़ाइल में निम्न जोड़ें:
py-autoreload = 1
- 1. uWSGI और मल्टीथ्रेडेड फ्लास्क ऐप को
- 2. uWSGI
- 3. nginx के साथ स्थिर होमपेज की सेवा करना और uwsgi
- 4. UWSGI
- 5. फ्लास्क
- 6. nginx + uwsgi
- 7. फ्लास्क डीबग = यूडब्ल्यूएसजीआई
- 8. django प्रोजेक्ट के लिए uWSGI + nginx, स्ट्रिंग uwsgi
- 9. uWSGI रखरखाव
- 10. सिद्धांत 2 के साथ सेट सेट करें?
- 11. फ्लास्क
- 12. जेपीए के साथ ईक्लीपसेलिंक कैसे सेट करें?
- 13. form_for के साथ कार्रवाई कैसे सेट करें?
- 14. फ्लास्क
- 15. uWSGI और चेरोकी
- 16. uwsgi + django Nginx के माध्यम से - uwsgi सेटिंग्स/स्पॉन?
- 17. फ्लास्क
- 18. फ्लास्क
- 19. फ्लास्क
- 20. फ्लास्क
- 21. फ्लास्क
- 22. फ्लास्क
- 23. फ्लास्क
- 24. Django uwsgi आयात त्रुटि
- 25. फ्लास्क/जीएई में टैग कैसे प्रस्तुत करें?
- 26. फ्लास्क
- 27. फ्लास्क
- 28. फ्लास्क
- 29. फ्लास्क-स्क्लाक्लेमी
- 30. फ्लास्क
लिंक अब उपलब्ध नहीं है – ricosrealm