আমি কি কেবল ফ্লাস্ক অ্যাপ্লিকেশন.আরুন () কে একক হিসাবে ব্যবহার করে একাধিক ক্লায়েন্ট পরিবেশন করতে পারি?


201

আমি জানি আমি ফ্লাস্ককে অ্যাপাচি বা অন্যান্য ওয়েব সার্ভারের সাথে লিঙ্ক করতে পারি। তবে, আমি এক সাথে একাধিক ক্লায়েন্ট পরিবেশন করে স্ট্যান্ডসোন সার্ভার হিসাবে ফ্লাস্ক চালানোর কথা ভাবছিলাম।

এটা কি সম্ভব? আমি কি একাধিক থ্রেড স্প্যানিং পরিচালনা করতে এবং সেগুলি পরিচালনা করতে পারি?

উত্তর:


295

flask.Flask.runঅতিরিক্ত কীওয়ার্ড আর্গুমেন্টগুলি গ্রহণ করে ( **options) যেটিতে এটি ফরোয়ার্ড করা হয় werkzeug.serving.run_simple- এর মধ্যে দুটি আর্গুমেন্ট হ'ল threaded(একটি বুলিয়ান) এবং processes(যা আপনি উইকিজেগ অনুরোধগুলি পরিচালনা করতে একাধিক প্রক্রিয়া চালিয়ে নিতে একের বেশি সংখ্যককে সেট করতে পারেন)।

threadedTrueফ্লাস্ক ১.০ হিসাবে ডিফল্ট , সুতরাং ফ্লাস্কের সর্বশেষ সংস্করণগুলির জন্য, ডিফল্ট বিকাশ সার্ভার ডিফল্টরূপে একাধিক ক্লায়েন্ট পরিবেশন করতে সক্ষম হবে। ফ্লাস্কের পুরানো সংস্করণগুলির জন্য, আপনি threaded=Trueএই আচরণটি সক্ষম করতে স্পষ্টভাবে পাস করতে পারেন ।

উদাহরণস্বরূপ, আপনি করতে পারেন

if __name__ == '__main__':
    app.run(threaded=True)

পুরানো ফ্লাস্ক সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ উপায়ে থ্রেডগুলি ব্যবহার করে একাধিক ক্লায়েন্টকে পরিচালনা করতে or

if __name__ == '__main__':
    app.run(threaded=False, processes=3)

আসন্ন অনুরোধগুলি হ্যান্ডেল করার জন্য তিনটি প্রক্রিয়া স্পার করতে ওয়ার্কজেগকে বলতে, বা ঠিক

if __name__ == '__main__':
    app.run()

থ্রেড ব্যবহার করে একাধিক ক্লায়েন্ট পরিচালনা করতে আপনি যদি জানেন যে আপনি ফ্লাস্ক ০.০ বা তার পরে ব্যবহার করছেন।

বলা হচ্ছে, ওয়ার্কজেগের serving.run_simpleস্ট্যান্ডার্ড লাইব্রেরির wsgirefপ্যাকেজ মোড়ানো - এবং এই প্যাকেজে ডাব্লুএসজিআইয়ের একটি রেফারেন্স বাস্তবায়ন রয়েছে, কোনও উত্পাদন-প্রস্তুত ওয়েব সার্ভার নয়। আপনি যদি উত্পাদনে ফ্লাস্ক ব্যবহার করতে চলেছেন (ধরে নিলেন যে "উত্পাদন" কম ট্রাফিকের অভ্যন্তরীণ অ্যাপ্লিকেশন নয় যা 10 টিরও বেশি সহকারী ব্যবহারকারী নেই) এটি সত্যিকারের ওয়েব সার্ভারের পিছনে দাঁড় করানোর বিষয়টি নিশ্চিত করুন (ফ্ল্যাশকের ডকস বিভাগের শিরোনামটি দেখুন) কিছু প্রস্তাবিত পদ্ধতির জন্য স্থাপনার বিকল্পসমূহ )।


2
আমি যদি সর্বোচ্চ 100 জন ব্যবহারকারীকে দেখছি? আমি কি কেবল বরাদ্দ করতে পারি processes=100এবং এতে খুশি হতে পারি? আমার ক্ষেত্রে, আমার কেবল স্থিতিশীল ফাইল দরকার, কোনও HTTP পোস্ট পদ্ধতি নেই। আমার প্রয়োজনীয়তা হ'ল, আমি আমার প্যারেন্ট অ্যাপের অংশ হিসাবে সমস্ত ফ্লাস্ক থ্রেড চালাতে চাই, যাতে তারা সকলেই ভেরিয়েবলগুলি ভাগ করতে পারে।
ATOzTOA

4
Chuckles - @ATOzTOA - না, এসব সম্ভবত হবে বেশ পাল্টা উত্পাদনশীল (প্রসেস অপেক্ষাকৃত ব্যয়বহুল, এবং যদি না আপনি প্রতিটি অনুরোধে কাজ অনেক করছ কোন কারণে 4 বা 8 প্রসেস যথেষ্ট নয় হওয়া উচিত)। এটি বলে, যদি আপনি কেবল স্থিতিশীল সামগ্রী প্রদর্শন করেন তবে আপনি এমন সার্ভারের সাথে আরও ভাল হতে পারেন যা এটি করার জন্য অনুকূলিত হয়েছে (অ্যাপাচি, এনজিনিক্স, আইআইএস)।
শান ভিয়েরা

2
এছাড়াও, আপনাকে অনুরোধগুলির মধ্যে সাধারণত ভেরিয়েবলগুলি ভাগ করে নেওয়া উচিত নয় - যদি আপনি এটি করেন তবে আপনাকে নিজেই একটি প্রক্রিয়ার মধ্যে সীমাবদ্ধ করতে হবে বা কিছু ব্যান্ড-ব্যান্ড যোগাযোগ (রেডিস, একটি ডাটাবেস, ফাইল সিস্টেম ইত্যাদি) ব্যবহার করতে হবে so আপনার প্রতিটি প্রক্রিয়া সিঙ্ক থাকে।
শান ভিইরা

3
@ATOzTOA - আপনি যদি আরও ভাল সার্ভারটি স্পিন করতে না পারেন তবে আমি কেবল এটিকে ঘূর্ণি দিয়ে দেব এবং কী ঘটবে তা দেখুন। যদি এটি লোডের অধীনে ভাল সম্পাদন না করে তবে আপনি এটি অন্য কোনও ওয়েবসারভারের পিছনে স্থাপন করতে পারেন।
শান ভিয়েরা

2
আপনি কেন একই সময়ে 'থ্রেডেড' এবং 'প্রসেস' নির্দিষ্ট করতে পারবেন না সে সম্পর্কে আপনার প্রশ্নের বিষয়ে @ATOTTAA, সিএফ কোডটি এখানে সিএফ করুন: ওয়ার্কজেগ.ড্রেডহেডসকস.অর্গ
en

62

app.run()ফ্লাস্কের মধ্যে থেকে সহজটি ব্যবহার করে একক থ্রেডে একক সিঙ্ক্রোনাস সার্ভার তৈরি করা হয় যা একবারে কেবলমাত্র একটি ক্লায়েন্টকে পরিবেশন করতে সক্ষম। এটি ঠিক এই কারণেই স্বল্প চাহিদাযুক্ত (অর্থাৎ উন্নয়ন, ডিবাগিং) নিয়ন্ত্রিত পরিবেশে ব্যবহারের উদ্দেশ্যে।

থ্রেড তৈরি করা এবং সেগুলি নিজে পরিচালনা করা সম্ভবত পাইথন জিআইএল-এর কারণে আপনাকে খুব বেশি দূরে নিয়ে যেতে পারে না ।

এটি বলেছিল, আপনার কাছে এখনও কিছু ভাল বিকল্প রয়েছে। গুনিকর্ন হ'ল একটি শক্তিশালী, সহজেই ব্যবহারযোগ্য ডাব্লুএসজিআই সার্ভার যা আপনাকে একাধিক কর্মী (পৃথক প্রক্রিয়া, তাই কোনও জিআইএল উদ্বেগ না জাগাতে) দেবে, এবং এমনকী অ্যাসিক্রোনাস কর্মীদের সাথে আসে যা আপনার অ্যাপ্লিকেশনটি দ্রুততর করবে (এবং এটি আরও সুরক্ষিত করবে) সামান্য সহ আপনার পক্ষ থেকে কোনও কাজ করা হয়নি (বিশেষত ফ্লাস্ক সহ)।

তবুও, এমনকি গ্যানিকর্নকে সম্ভবত সরাসরি প্রকাশ্যে প্রকাশ করা উচিত নয়। উত্পাদনে, এটি আরও শক্তিশালী এইচটিটিপি সার্ভারের পিছনে ব্যবহার করা উচিত; nginx Gunicorn এবং বোতল সঙ্গে ভাল যেতে থাকে।


17
বেশ না। গুনিকর্ন পাইথন, এনগিনেক্স নয়। যদিও আপনি সেগুলি কীভাবে ব্যবহার করবেন তা নয়। গ্যানিকর্ন আপনাকে আপনার অ্যাপটি gunicorn app:app 127.0.0.1:8080পরিবর্তে চালিত করতে দেবে python app.py। Nginx জনসেবার যে আপনার ব্যক্তিগত Gunicorn রানের অ্যাপ্লিকেশন প্রকাশ হিসেবে কাজ করবে (রিভার্স প্রক্সি) , নিম্ন স্তরের HTTP- র বাস্তবায়ন বিবরণ সমস্ত প্রকারের গোপন, সম্ভবত স্ট্যাটিক ফাইল সরাসরি, ইত্যাদি ভজনা
রায়ান Artecona

অ্যাড.আরুনযুক্ত ফ্লাস্ক (থ্রেডড = ট্রু)
অ্যাপাচি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.