পাইথন 3.7 ডকুমেন্টেশন
আমি পাইথন threading
ডকুমেন্টেশন থেকে নিম্নলিখিত উদ্ধৃতি হাইলাইট করতে চাই :
সিপিথন বাস্তবায়নের বিশদ: সিপিথনে, গ্লোবাল ইন্টারপ্রেটার লকের কারণে, কেবলমাত্র একটি থ্রেড পাইথন কোড একবারে কার্যকর করতে পারে (যদিও কিছু নির্দিষ্ট কর্মক্ষমতা-ভিত্তিক গ্রন্থাগারগুলি এই সীমাবদ্ধতাটি অতিক্রম করতে পারে)। আপনি যদি নিজের অ্যাপ্লিকেশনটি মাল্টি-কোর মেশিনগুলির গণ্য সংস্থানগুলির আরও ভাল ব্যবহার করতে চান তবে আপনাকে multiprocessing
বা ব্যবহার করার পরামর্শ দেওয়া হচ্ছে concurrent.futures.ProcessPoolExecutor
। তবে আপনি যদি একসাথে একাধিক আই / ও-বাউন্ড কার্য চালাতে চান তবে থ্রেডিং এখনও উপযুক্ত মডেল।
গ্লসারি এন্ট্রিরglobal interpreter lock
এই লিঙ্কগুলির জন্য এটি ব্যাখ্যা করে যে জিআইএল ইঙ্গিত দেয় যে পাইথনে থ্রেডযুক্ত সমান্তরালতা সিপিইউ বাউন্ড কাজের জন্য উপযুক্ত নয় :
সিপিথন দোভাষী দ্বারা ব্যবহৃত পদ্ধতিটি নিশ্চিত করে যে একবারে একটি মাত্র থ্রেড পাইথন বাইটকোড কার্যকর করে। এটি সিপিথন বাস্তবায়নকে অবজেক্ট মডেল তৈরি করে (ডিকের মতো সমালোচিত বিল্ট-ইন প্রকার সহ) একযোগে অ্যাক্সেসের বিরুদ্ধে পরিষ্কারভাবে নিরাপদ করে তোলে making মাল্টি-প্রসেসর মেশিন দ্বারা বহন করা সমান্তরালতার অনেক ব্যয়ে পুরো দোভাষীকে লক করা দোভাষীকে একত্রে-থ্রেড করা সহজ করে তোলে।
তবে স্ট্যান্ডার্ড বা তৃতীয় পক্ষের কিছু এক্সটেনশন মডিউলগুলি এমনভাবে ডিজাইন করা হয়েছে যাতে সংক্ষেপণ বা হ্যাশিংয়ের মতো কম্পিউটিং-নিবিড় কাজগুলি করার সময় জিআইএলকে মুক্তি দিতে পারে। এছাড়াও, জিআইএল সর্বদা আই / ও করার সময় প্রকাশিত হয়।
একটি "ফ্রি-থ্রেডড" ইন্টারপ্রিটার তৈরি করার অতীত প্রচেষ্টা (যিনি ভাগ করে নেওয়া ডেটাটিকে অনেক সূক্ষ্ম গ্রানুলারিটিতে লক করে) সফল হতে পারেনি কারণ সাধারণ একক-প্রসেসরের ক্ষেত্রে পারফরম্যান্স ভোগ করা হয়েছিল। এটি বিশ্বাস করা হয় যে এই পারফরম্যান্স ইস্যুটি অতিক্রম করা বাস্তবায়নকে আরও জটিল এবং তাই বজায় রাখতে ব্যয়বহুল।
এই উদ্ধৃতিটি সূচিত করে যে ডিক্টস এবং এইভাবে পরিবর্তনশীল অ্যাসাইনমেন্টটি সিপিথন বাস্তবায়ন বিশদ হিসাবে থ্রেড নিরাপদ:
এরপরে, প্যাকেজটির ডক্সগুলিmultiprocessing
ব্যাখ্যা করে যে কীভাবে এটি স্পেসিং প্রক্রিয়া দ্বারা জিআইএলকে অতিক্রম করে যখন এর অনুরূপ একটি ইন্টারফেস প্রকাশ করে threading
:
মাল্টিপ্রসেসিং এমন একটি প্যাকেজ যা থ্রেডিং মডিউলটির অনুরূপ একটি এপিআই ব্যবহার করে স্পোনিং প্রক্রিয়াগুলিকে সমর্থন করে। মাল্টিপ্রসেসিং প্যাকেজটি স্থানীয় এবং দূরবর্তী উভয়ই সম্মিলন সরবরাহ করে, কার্যকরভাবে থ্রেডের পরিবর্তে সাব-প্রসেসগুলি ব্যবহার করে গ্লোবাল ইন্টারপ্রেটার লককে পাশের পদক্ষেপে কার্যকর করে। এর কারণে, মাল্টিপ্রসেসিং মডিউল প্রোগ্রামারকে কোনও প্রদত্ত মেশিনে সম্পূর্ণরূপে একাধিক প্রসেসর লাভ করতে দেয়। এটি ইউনিক্স এবং উইন্ডোজ উভয় ক্ষেত্রেই চলমান।
এবং দস্তাবেজগুলিconcurrent.futures.ProcessPoolExecutor
ব্যাখ্যা করে যে এটি multiprocessing
ব্যাকেন্ড হিসাবে ব্যবহার করে :
প্রসেসপুলএকসিকিউটর শ্রেণি হল একটি এক্সিকিউটার সাবক্লাস যা কলগুলি অ্যাসিক্রোনারিক্যালি কার্যকর করতে একটি পুল ব্যবহার করে। প্রসেসপুলএ্যাকসিকিউটর একাধিক প্রসেসিং মডিউল ব্যবহার করে, যা এটি গ্লোবাল ইন্টারপ্রেটার লককে সাইড-স্টেপ করার অনুমতি দেয় তবে এর অর্থ হ'ল কেবল বাছাইযোগ্য বস্তুগুলি সম্পাদন এবং ফিরে দেওয়া যায়।
অন্যান্য বেস ক্লাসে বিপরীত পাঠানো উচিত যা ThreadPoolExecutor
যে প্রক্রিয়ার পরিবর্তে থ্রেড ব্যবহার
থ্রেডপুলএ্যাক্সিকিউটর একটি এক্সিকিউটার সাবক্লাস যা কলগুলিকে অ্যাসিঙ্ক্রোনালিভাবে চালিত করতে থ্রেডের পুল ব্যবহার করে।
যা থেকে আমরা এই সিদ্ধান্তে পৌঁছেছি যে ThreadPoolExecutor
কেবলমাত্র I / O বাউন্ড কাজের জন্য উপযুক্ত, পাশাপাশি ProcessPoolExecutor
সিপিইউ বাউন্ড কার্যগুলিও পরিচালনা করতে পারে।
নিম্নলিখিত প্রশ্নটি জিজ্ঞাসা করে যে জিআইএল প্রথম স্থানে রয়েছে: কেন গ্লোবাল ইন্টারপ্রেটার লক?
প্রক্রিয়া বনাম থ্রেড পরীক্ষা-নিরীক্ষা
এ মাল্টিপ্রসেসিং বনাম থ্রেডিং পাইথন আমি পাইথন মধ্যে থ্রেড বনাম প্রক্রিয়ার একটি পরীক্ষামূলক বিশ্লেষণ করেছি।
ফলাফলগুলির দ্রুত পূর্বরূপ: