একটি একক ফ্লাস্ক প্রক্রিয়া কত সমবর্তী অনুরোধগুলি গ্রহণ করে?


138

আমি ফ্লাস্কের সাথে একটি অ্যাপ তৈরি করছি, তবে আমি ডাব্লুএসজিআই সম্পর্কে খুব বেশি জানি না এবং এটি এইচটিটিপি বেস, ওয়ার্কজেগ। আমি যখন গ্যানিকর্ন এবং 4 কর্মী প্রক্রিয়া সহ ফ্লাস্ক অ্যাপ্লিকেশন পরিবেশন করা শুরু করি তখন এর অর্থ কি আমি 4 সমবর্তী অনুরোধগুলি পরিচালনা করতে পারি?

আমার অর্থ সহবর্তী অনুরোধগুলি, এবং প্রতি সেকেন্ডে বা অন্য কোনও কিছুর জন্য অনুরোধ নয়।

উত্তর:


183

বিকাশ সার্ভার চালানোর সময় - যা চালানোর মাধ্যমে আপনি যা পান app.run(), আপনি একটি একক সিঙ্ক্রোনাস প্রক্রিয়া পান যার অর্থ একটি সময়ে সর্বাধিক 1 টি অনুরোধ প্রক্রিয়া করা হচ্ছে।

গুনিকর্নকে এর ডিফল্ট কনফিগারেশনে সামনে রেখে এবং খালি সংখ্যা বাড়িয়ে --workersআপনি যা পান তা হ'ল মূলত বেশ কয়েকটি প্রক্রিয়া (গুনিকর্ন দ্বারা পরিচালিত) যা প্রতিটি app.run()বিকাশ সার্ভারের মতো আচরণ করে । 4 জন কর্মী == 4 সমবর্তী অনুরোধ। এটি কারণ গ্যানিকর্ন syncডিফল্টরূপে এর অন্তর্ভুক্ত কর্মী প্রকারটি ব্যবহার করে ।

এটি লক্ষ করা গুরুত্বপূর্ণ যে গুনিকর্ন-এ অ্যাসিনক্রোনাস কর্মীও রয়েছে, যথা eventletএবং gevent(এবং এছাড়াও tornado, তবে এটি টর্নেডো কাঠামোর সাথে সবচেয়ে ভাল ব্যবহৃত হয়েছে, মনে হয়)। --worker-classপতাকা সহ এই অ্যাসিঙ্ক কর্মীদের মধ্যে একটি নির্দিষ্ট করে , আপনি যা পান সেটি হ'ল গুনিকর্ন বহুসংখ্যক অ্যাসিঙ্ক প্রক্রিয়া পরিচালনা করে, যার প্রতিটি তার নিজস্ব স্বচ্ছলতা পরিচালনা করে । এই প্রক্রিয়াগুলি থ্রেড ব্যবহার করে না, পরিবর্তে কর্টাইনগুলি। মূলত, প্রতিটি প্রক্রিয়াটির মধ্যে, একবারে কেবল 1 টি জিনিস ঘটতে পারে (1 থ্রেড), তবে বস্তুগুলি 'বিরাম দেওয়া' যেতে পারে যখন তারা বাহ্যিক প্রক্রিয়াগুলি শেষ করার জন্য অপেক্ষা করে থাকে (মনে করুন ডাটাবেস অনুসন্ধানগুলি বা নেটওয়ার্ক I / O তে অপেক্ষা করুন)।

এর অর্থ, আপনি যদি গুনিকর্নের একটি অ্যাসিঙ্ক কর্মী ব্যবহার করেন তবে প্রতিটি কর্মী একসাথে একক অনুরোধের চেয়ে অনেক বেশি পরিচালনা করতে পারে। ঠিক কতজন কর্মী সেরা তা আপনার অ্যাপের প্রকৃতি, তার পরিবেশ, এটি চালিত হার্ডওয়ার ইত্যাদির উপর নির্ভর করে More আরও তথ্য বিশদটি গ্যানিকর্নের ডিজাইন পৃষ্ঠায় পাওয়া যাবে এবং কীভাবে জেন্টেন্ট তার ভূমিকা পৃষ্ঠাতে কাজ করবে সে সম্পর্কে নোটগুলি পাওয়া যাবে ।


4
গুনিকর্ন এখন 19 সংস্করণ থেকে "রিয়েল" থ্রেডগুলিকে সমর্থন করে this এটি এবং এটি দেখুন
ফিলিপ

2
কোন সংস্থানগুলি কীভাবে ভাগ হবে (এবং কীভাবে) এবং কোনটি থ্রেড / প্রক্রিয়াগুলির মধ্যে সম্পূর্ণ পৃথক রয়েছে তা কীভাবে একটি রাখে? উদাহরণস্বরূপ, আমি এমন পরিস্থিতিটি কীভাবে পরিচালনা করব যেখানে আমি গুনিকর্ন দ্বারা পরিচালিত এবং ফ্লাস্ক হ্যান্ডলারগুলিতে ব্যবহৃত বেশ কয়েকটি প্রক্রিয়ার মধ্যে একটি বিশাল ডেটাস্ট্রাকচার ভাগ করতে চাই?
জোহান পেট্রাক

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

ইভটির কী হবে? এটি কি ইভের জন্য ধরে রাখে?
warশ্বর

2
ফ্ল্যাশ ডেভলপমেন্ট সার্ভার v1.0 ( github.com/pallet/flask/pull/2529 ) থেকে ডিফল্টভাবে থ্রেডগুলি ব্যবহার করে
hychou

40

বর্তমানে সেখানে একটি হল পর্যন্ত সহজ ইতিমধ্যেই বেশী সমাধান। আপনার অ্যাপ্লিকেশনটি চালানোর সময় আপনাকে কেবলমাত্র threaded=Trueপ্যারামিটার ধরে app.run()কলটিতে যেতে হবে, যেমন:

app.run(host="your.host", port=4321, threaded=True)

ওয়ার্কজেগ ডক্সে আমরা যা দেখতে পাচ্ছি তার মতো আরেকটি বিকল্প হ'লprocesses প্যারামিটারটি ব্যবহার করা, যা একটি সংখ্যা> 1 পান যা পরিচালনা করতে সর্বাধিক সংখ্যার সমবর্তী প্রক্রিয়াগুলি নির্দেশ করে:

  • থ্রেডযুক্ত - প্রক্রিয়াটি প্রতিটি অনুরোধকে আলাদা থ্রেডে পরিচালনা করতে হবে?
  • প্রক্রিয়াগুলি - যদি 1 এর বেশি হয় তবে প্রতিটি অনুরোধটিকে নতুন প্রসেসে এই সর্বাধিক সংখ্যক সহবর্তী প্রক্রিয়া পর্যন্ত পরিচালনা করুন।

কিছুটা এইরকম:

app.run(host="your.host", port=4321, processes=3) #up to 3 processes

এখানেrun() পদ্ধতি সম্পর্কে আরও তথ্য এবং ব্লগ পোস্ট যা আমাকে সমাধান এবং এপিআই রেফারেন্সগুলি সন্ধান করতে পরিচালিত করেছিল।


দ্রষ্টব্য:run() পদ্ধতিগুলি সম্পর্কে ফ্লাস্ক ডক্সে এটি নির্দেশিত হয়েছে যে এটি একটি উত্পাদন পরিবেশে এটি ব্যবহার করা নিরুৎসাহিত করা হয়েছে কারণ ( উক্তি ): "হালকা ওজন এবং সহজ ব্যবহারের ক্ষেত্রে, ফ্লাস্কের অন্তর্নির্মিত সার্ভারটি উত্পাদন করতে উপযুক্ত নয় কারণ এটি ভাল স্কেল করে না production । "

যাইহোক, উত্পাদনে যাওয়ার সময় এটি করার প্রস্তাবিত উপায়গুলির জন্য তারা তাদের স্থাপনার বিকল্প পৃষ্ঠাতে ইঙ্গিত করে ।


5
তথ্যের জন্য ধন্যবাদ। এটি লক্ষণীয় গুরুত্বপূর্ণ যে দৌড়ের জন্য ডকটি জানিয়েছে যে এটি সুরক্ষা বা কার্য সম্পাদনের প্রয়োজনীয়তা পূরণ করে না এমন উল্লেখ করে একটি উত্পাদন পরিবেশে এটি ব্যবহার করা উচিত নয়।
কফি_ফ্যান

1
@ কফি_ফ্যান আপনি ঠিক বলেছেন এমনকি সর্বশেষতম 1.1.x এ তারা এটিকে নিরুৎসাহিত করে এবং পরিবর্তে উত্পাদনের সময় তাদের পৃষ্ঠাগুলি স্থাপনের বিকল্পগুলিতে চেক করার পরামর্শ দেয় । উত্তরে আপনার মূল্যবান পর্যবেক্ষণ সহ :)
ডার্কসিগনাস

33

ফ্লাস্ক একই সময়ে প্রতিটি থ্রেডের জন্য একটি অনুরোধ প্রক্রিয়া করবে। আপনার যদি প্রতিটি 4 টি থ্রেড সহ 2 টি প্রক্রিয়া থাকে তবে এটি 8 সমবর্তী অনুরোধসমূহ।

ফ্লাস্ক থ্রেড বা প্রক্রিয়াগুলি পোড়া বা পরিচালনা করে না। এটি ডাব্লুএসজিআই গেটওয়ের দায়বদ্ধতা (উদাঃ গ্যানিকর্ন)।


9

না- আপনি অবশ্যই এর চেয়ে আরও বেশি কিছু পরিচালনা করতে পারেন।

এটি গভীরভাবে গভীরভাবে স্মরণ করা গুরুত্বপূর্ণ যে আপনি একক কোর মেশিনটি চালাচ্ছেন বলে ধরে নেওয়া, সিপিইউ সত্যিই কেবল একবারে একটি নির্দেশ চালায় *।

যথা, সিপিইউ কেবলমাত্র সীমিত নির্দেশাবলীর একটি সেট চালিয়ে দিতে পারে এবং এটি প্রতি ক্লক টিকের জন্য একাধিক নির্দেশনা কার্যকর করতে পারে না (অনেক নির্দেশাবলী এমনকি 1 টিরও বেশি টিক নেয়)।

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

এই "জিনিসগুলি" প্রক্রিয়াগুলি হতে পারে, যা কোডের একক যা একযোগে সঞ্চালিত হয় সেই অর্থে যে প্রতিটি প্রক্রিয়া তার নিজস্ব, অ-ভাগীকৃত মেমরির সাথে তার নিজস্ব বিশ্বে চলছে বলে মনে করে।

আর একটি উদাহরণ থ্রেড, যা অভ্যন্তরীণ প্রসেসের কোডগুলির একক যা একই সাথে সম্মতিও দেয়।

আপনার 4 কর্মী প্রক্রিয়াগুলি 4 টিরও বেশি অনুরোধগুলি পরিচালনা করতে সক্ষম হবেন তা হ'ল তারা আরও এবং বেশি অনুরোধগুলি পরিচালনা করতে থ্রেডগুলি ছড়িয়ে দেবে।

প্রকৃত অনুরোধের সীমাটি HTTP সার্ভারের উপর নির্ভর করে, I / O, OS, হার্ডওয়্যার, নেটওয়ার্ক সংযোগ ইত্যাদির উপর নির্ভর করে depends

শুভকামনা!

* নির্দেশাবলী হ'ল সিপিইউ চালাতে পারে এমন খুব প্রাথমিক আদেশ। উদাহরণ - দুটি সংখ্যা যুক্ত করুন, এক নির্দেশ থেকে অন্য নির্দেশে ঝাঁপুন


1
এটি কি গন্ডিকর্ন থ্রেডগুলি বা ফ্লাস্ককে ছড়িয়ে দিচ্ছে? আমি সম্ভাবনার পক্ষে কোনও প্রমাণ পাইনি।
জেডি।

1
অবশ্যই, আমি বুঝতে পারি যে প্রক্রিয়াগুলি সম্পর্কে, তবে উত্তরটি বলেছে যে আরও থ্রেড প্রয়োজনীয় হিসাবে তৈরি হয়েছে। আমি এর নিশ্চয়তা পেতে চাই।
জেডি।

4
"গভীর গভীরে, ধরে নিই যে আপনি একটি একক কোর মেশিন চালাচ্ছেন, সিপিইউ সত্যিই কেবলমাত্র একটি নির্দেশ চালায় * একবারে" আধুনিক মেশিনগুলির ক্ষেত্রে এটি সঠিক নয়। বেশিরভাগ আধুনিক সিপিইউগুলি পাইপলাইনড এবং সুপারসক্যালার , যেখানে একটি সিঙ্গেল কোরের একাধিক এক্সিকিউশন ইউনিট এবং একটি নির্দেশিকা ডিকোডার রয়েছে যা সফ্টওয়্যার দিক থেকে দেখা "মেশিন কোড" কে আসল হার্ডওয়্যার মাইক্রো-অপ্সে রূপান্তর করে যা পৃথক এক্সিকিউশন ইউনিটগুলিতে প্রেরণ করা হয়।
মাইকেল জেরি

1
স্পষ্ট করে বলার জন্য, দিনের দিকে ফিরে, সিপিইউগুলি আসলে একটি নির্বাহযোগ্য - মেশিন কোডে সংখ্যাসূচক নির্দেশনা কার্যকর করে। প্রতিটি সিপিইউ রেফারেন্সের একটি নির্দেশের সময়সীমা থাকে যা দেখায় যে প্রতিটি নির্দেশ কোনও মেমরি রেফারেন্স সহ কতগুলি ঘড়ি চক্র নিয়েছিল। সুতরাং কোনও কোডের টুকরো কত সময় লাগবে তা জানতে আপনি কেবল সময়গুলি যোগ করতে পারেন। আধুনিক সিপিইউ মোটেও এমন নয়। একটি আকর্ষণীয় ব্যতিক্রম হ'ল বিগলবোন যাতে একটি আধুনিক সুপারক্যালার এআরএম প্রসেসর এবং দু'টি পুরানো ফ্যাশনযুক্ত "পিআরইউ" প্রসেসরের নির্দিষ্ট নির্দেশের সময় রয়েছে।
মাইকেল গ্যারি

1
এবং এটি স্পষ্ট করে বলার জন্য, যখন আমি "আধুনিক" বলছিলাম তখন আমি এআরএম / ইন্টেল / এএমডি চিপস - পাইপলাইনযুক্ত, সুপারসক্যালার ইত্যাদির মতো প্রসেসরের জন্য একটি লুজ শর্টহ্যান্ড হিসাবে ব্যবহার করছিলাম অবশ্যই অবশ্যই আধুনিক প্রসেসর রয়েছে যা নির্দিষ্ট সময়ের সাথে পুরানো পথে কাজ করে প্রতি নির্দেশ অনুসারে, আমি উল্লিখিত বিগলবোনের PRU গুলি এবং বিভিন্ন নতুন মাইক্রোকন্ট্রোলারগুলির মতো like (এবং এখন গুনিকর্ন ফিরে!)
মাইকেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.