আমি concurrent.futures
আরও "অ্যাডভান্সড" বলব না - এটি একাধিক সহজ ইন্টারফেস যা আপনি একাধিক থ্রেড বা একাধিক প্রক্রিয়া অন্তর্নিহিত সমান্তরালতা জিমিক হিসাবে ব্যবহার না করেই একইভাবে কাজ করে same
সুতরাং, কার্যত "সহজ ইন্টারফেস" সমস্ত উদাহরণ মতো একই ঘটনা ঘটে বিনিময় প্রথা জড়িত আছেন: এটা এত কম পাওয়া যাচ্ছে তা শুধু কারণ বড় অংশ একটি অগভীর লার্নিং কার্ভ আছে, করতে শেখা যাবে; তবে, কারণ এটি কম বিকল্প সরবরাহ করে, অবশেষে এটি আপনাকে হতাশ করতে পারে উপায়গুলি আরও ধনী ইন্টারফেসগুলি না করে।
যতক্ষণ না সিপিইউ-ভিত্তিক কাজগুলি চলে, সেভাবে অনেক অর্থবহ বলতে বলতে খুব নীচে নির্দিষ্ট করা হয়। সিপিইউডন-এর আওতায় থাকা সিপিইউ-র সাথে সম্পর্কিত কাজের জন্য, দ্রুতগতির কোনও সম্ভাবনা পাওয়ার জন্য আপনার একাধিক থ্রেডের চেয়ে একাধিক প্রক্রিয়া প্রয়োজন। তবে আপনি যে স্পিডআপ পাবেন তার কতটুকু (যদি থাকে) আপনার হার্ডওয়্যার, আপনার ওএসের বিবরণ এবং বিশেষত আপনার নির্দিষ্ট কাজের জন্য কতটা আন্ত-প্রক্রিয়া যোগাযোগ প্রয়োজন তার উপর নির্ভর করে। কভারগুলির অধীনে, সমস্ত আন্ত-প্রক্রিয়া সমান্তরালতা গিমিকগুলি একই ওএস আদিমগুলির উপর নির্ভর করে - আপনি যে উচ্চ-স্তরের এপিআই ব্যবহার করেন তা নীচের লাইনের গতির কোনও প্রাথমিক কারণ নয়।
সম্পাদনা: উদাহরণ
আপনি উল্লেখ করা নিবন্ধে এখানে চূড়ান্ত কোডটি দেখানো হয়েছে, তবে আমি এটিকে কার্যকর করার জন্য একটি আমদানি বিবৃতি যুক্ত করছি:
from concurrent.futures import ProcessPoolExecutor
def pool_factorizer_map(nums, nprocs):
# Let the executor divide the work among processes by using 'map'.
with ProcessPoolExecutor(max_workers=nprocs) as executor:
return {num:factors for num, factors in
zip(nums,
executor.map(factorize_naive, nums))}
multiprocessing
পরিবর্তে ব্যবহার করে ঠিক একই জিনিস এখানে :
import multiprocessing as mp
def mp_factorizer_map(nums, nprocs):
with mp.Pool(nprocs) as pool:
return {num:factors for num, factors in
zip(nums,
pool.map(factorize_naive, nums))}
দ্রষ্টব্য যে multiprocessing.Pool
পাইথন ৩.৩-তে প্রসঙ্গ পরিচালক হিসাবে অবজেক্টগুলি ব্যবহার করার ক্ষমতা যুক্ত করা হয়েছিল।
কোনটির সাথে কাজ করা সহজ? LOL ;-) তারা মূলত অভিন্ন।
একটি পার্থক্য হ'ল Pool
জিনিসগুলি করার বিভিন্ন উপায়কে সমর্থন করে যা আপনি শেখার বক্ররেখার উপরে উঠে না যাওয়া পর্যন্ত বুঝতে পারবেন না এটি কত সহজ হতে পারে।
আবার, এই সমস্ত বিভিন্ন উপায় একটি শক্তি এবং দুর্বলতা উভয়ই। এগুলি একটি শক্তি কারণ কিছু পরিস্থিতিতে নমনীয়তার প্রয়োজন হতে পারে। "করণীয় কেবলমাত্র একটি সুস্পষ্ট উপায়" কারণ এগুলি দুর্বলতা। কোনও প্রকল্প যেমন concurrent.futures
তার ন্যূনতম এপিআই ব্যবহার করা যায় তাতে কৃতজ্ঞ অভিনবত্বের অভাবে দীর্ঘমেয়াদে রক্ষণাবেক্ষণ করা সম্ভবত সহজতর হবে (যদি সম্ভব হয়) তবে এটি সম্ভবত স্টিক করা।