Dogslow ধীর অনুরোধ tracebacks লগ যে জ্যাঙ্গো রক্ষী কুকুর মিডলওয়্যার বর্গ.
ইনস্টলেশন:
Dogslow ইনস্টল করুন:
dogslow ইনস্টল পিপ
তারপর আপনার জ্যাঙ্গো settings.py ফাইলের মধ্যে মিডলওয়্যার ক্লাস আপনার তালিকা থেকে যদি যোগ করুন:
MIDDLEWARE_CLASSES = (
& Nbsp; 'dogslow.WatchdogMiddleware',
& Nbsp; ...
)
ভাল ফলাফলের জন্য, এটি চালানোর জন্য করা হয় যে প্রথম middlewares এক করা.
কনফিগারেশন:
আপনি সুর রক্ষী কুকুর আপনার settings.py ফাইলের মধ্যে নিম্নলিখিত কনফিগারেশন বৈশিষ্ট্য ব্যবহার করতে পারেন:
# রক্ষী কুকুর মিথ্যাতে সেট, অস্থায়ীভাবে নিষ্ক্রিয় করা, ডিফল্টরূপে সক্রিয় করা হয়:
DOGSLOW = সত্য
রক্ষী কুকুর লগ ফাইল সঞ্চয় যেখানে # অবস্থান:
DOGSLOW_OUTPUT = '/ tmp'
আর 25 সেকেন্ডের গ্রহণ # লগ অনুরোধ:
DOGSLOW_TIMER = 25
# উভয় যখন নির্দিষ্ট, ইমেইল ব্যাক:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
ব্যবহার:
প্রতি অন্তর্মুখী HTTP অনুরোধের রক্ষী কুকুর একটি 25 দ্বিতীয় সময়সীমার পায়. একটি অনুরোধ যে সময়ের মধ্যে ফিরে না হয়, তাহলে রক্ষী কুকুর সক্রিয় এবং অনুরোধ থ্রেড এর সময় স্ট্যাক একটি উঁকি নেয় এবং (সব স্থানীয় স্ট্যাক ভেরিয়েবল সহ - জ্যাঙ্গো শৈলী) ব্যাক-ট্রেস লিখেছেন একটি লগ ফাইলে.
প্রতিটি ধীর অনুরোধ এই যে দেখে মনে হচ্ছে একটি পৃথক ফাইলে লগ করা হয়:
16-05-2011 02:10:12 ইউটিসি: আনডেড অনুরোধে রূদ্ধ
পেতে http: // localhost: 8000 / বিলম্ব = 2
থ্রেড যোগাযোগ 140539485042432
প্রক্রিয়া ID: 18010
মূল PID,: 17762
শুরু করছে: 16-05-2011 02:10:10 ইউটিসি
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", লাইন 107, inner_run মধ্যে
& Nbsp; রান (self.addr, INT (self.port), হ্যান্ডলার, IPv6 = self.use_ipv6)
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", লাইন 696, রান
& Nbsp; httpd.serve_forever ()
& Nbsp; serve_forever মধ্যে, লাইন 227, "/usr/lib/python2.7/SocketServer.py" ফাইল
& Nbsp; self._handle_request_noblock ()
& Nbsp; _handle_request_noblock মধ্যে, লাইন 284, "/usr/lib/python2.7/SocketServer.py" ফাইল
& Nbsp; self.process_request (অনুরোধ, client_address)
& Nbsp; process_request মধ্যে, লাইন 310, "/usr/lib/python2.7/SocketServer.py" ফাইল
& Nbsp; self.finish_request (অনুরোধ, client_address)
& Nbsp; finish_request মধ্যে, লাইন 323, "/usr/lib/python2.7/SocketServer.py" ফাইল
& Nbsp; self.RequestHandlerClass (অনুরোধ, client_address, স্ব)
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", লাইন 570, __init__ মধ্যে
& Nbsp; BaseHTTPRequestHandler .__ Init __ (স্ব * args, ** kwargs)
& Nbsp; __init__ মধ্যে, লাইন 639, "/usr/lib/python2.7/SocketServer.py" ফাইল
& Nbsp; self.handle ()
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", লাইন 615, হ্যান্ডেল
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", লাইন 283, রান
& Nbsp; self.result = আবেদন (self.environ, self.start_response)
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", লাইন 68, __call__ মধ্যে
& Nbsp; ফিরে self.application (পরিবেষ্টন, start_response)
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", লাইন 273, __call__ মধ্যে
& Nbsp; প্রতিক্রিয়া = self.get_response (অনুরোধ)
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", লাইন 111, get_response মধ্যে
& Nbsp; প্রতিক্রিয়া = কলব্যাক (অনুরোধ, * callback_args, ** callback_kwargs)
& Nbsp; ঘুমের মধ্যে "/home/erik/work/middleware/middleware/sleep/views.py", লাইন 6, ফাইল
& Nbsp; time.sleep (ভাসা (request.GET.get ('বিলম্ব', 1)))
স্থানীয় ভেরিয়েবল সঙ্গে সম্পূর্ণ ব্যাক-ট্রেস:
& Nbsp; ফাইল "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", লাইন 107, inner_run মধ্যে
& Nbsp; রান (self.addr, INT (self.port), হ্যান্ডলার, IPv6 = self.use_ipv6)
& Nbsp; ... লোড আরও ...
উদাহরণস্বরূপ উপরে অনুরোধ থ্রেড তার স্ন্যাপশট গ্রহণ dogslow সময় () time.sleep মধ্যে ব্লক করা হয়েছে যে দেখায়.
Dogslow এর সময়সীমার আগে ফিরে অনুরোধ লগ পেতে না শেষ হয়ে যাবে.
যে dogslow শুধুমাত্র থ্রেড এর সময় স্ট্যাক একটি উঁকি লাগে উল্লেখ্য. এটা অনুরোধ ছিন্ন করা, বা অন্য কোন উপায়ে তা প্রভাবিত করে না. Dogslow ব্যবহার করে সেইজন্য উৎপাদন ব্যবহার করা নিরাপদ.
আদেশ সহকারে
Dogslow multithreading ব্যবহার করে. এটি একটি একক পটভূমি হ্যান্ডলগুলি রক্ষী কুকুর সময়সীমা উত্তীর্ণ থ্রেড আছে এবং মূল অনুরোধ থ্রেড বিঘ্নিত না হয়, যাতে tracebacks লাগে. এই কিছু ফলাফল করেছে.
Multithreading এবং গিল
CPython মধ্যে, Gil (গ্লোবাল ইন্টারপ্রেটার তালা) একযোগে পাইথন কোড নির্বাহ থেকে একাধিক থ্রেড বাধা দেয়. শুধু একটি থ্রেড স্পষ্টভাবে করতে পারেন একটি দ্বিতীয় থ্রেড রান, Gil তার লক রিলিজ যখন.
গিল একটি পাইথন প্রোগ্রাম আই করছেন যখন উদাহরণস্বরূপ, দোভাষী বাইরে কল ব্লক করে যখনই স্বয়ংক্রিয়ভাবে সম্পন্ন করা হয় মুক্তি.
Dogslow এই জন্য এটি শুধুমাত্র নির্ভরযোগ্যভাবে তারা কেশ নিজেদের অর্জন অপেক্ষা করছে, আই করছেন ঘুম কলিং বা ব্যস্ত হয়, কারণ ধীর যে অনুরোধ পথিমধ্যে করতে পারেন.
অধিকাংশ ক্ষেত্রে এই সূক্ষ্ম. ধীর জ্যাঙ্গো অনুরোধের একটি গুরুত্বপূর্ণ কারণ একটি দামী ডাটাবেস ক্যোয়ারী হয়. এই তদন্ত কর্মকর্তা যেহেতু, dogslow যারা সূক্ষ্ম বিচ্ছিন্ন করা যাবে. অনুরোধ থ্রেড না GIL মুক্তি, পাইথন কোড একটি অসীম লুপ হিট (অত্যন্ত ব্যয়বহুল বা বৈধ পাইথন এবং চালানো একটি দীর্ঘ সময় লাগে) যখন cPython এর GIL সমস্যাযুক্ত যেখানে একটি দৃশ্যকল্প. Dogslow এর রক্ষী কুকুর টাইমার runnable হয়ে আছে, যদিও এটি স্ট্যাক লগ ইন করতে পারেন.
কো রুটিন এবং Greenlets
Dogslow একটি সমকালীন কর্মী কনফিগারেশন-এ ব্যবহারের জন্য দেয়ার উদ্দেশ্যে করা হচ্ছে. ডেডিকেটেড থ্রেড (বা একক থ্রেড, ডেডিকেটেড কর্মী প্রসেস) ব্যবহার করে এমন একটি ওয়েবসার্ভার অনুরোধ পরিবেশন. তার ডিফল্ট সিঙ্ক-কর্মী মোডে Gunicorn হিসাবে আছে জ্যাঙ্গো এর বিল্ট ইন wsgi সার্ভার, এই আছে.
একাধিক অনুরোধ এক থ্রেড দ্বারা একই সময়ে পরিবেশিত হয় যেখানে একটি "সহ-রুটিন কাঠামো" সঙ্গে চলমান সময়, ব্যাক অর্থহীন হতে পারে?
আবশ্যক :.
<উল >
পাওয়া মন্তব্যসমূহ না