ভেবেছি আমি উপরে থেকে অনুলিপি করা সহজ উদাহরণগুলি সহজ করে তুলব, আমার জন্য পাই 3.6 এ কাজ করে। সবচেয়ে সহজ multiprocessing.Pool:
import multiprocessing
import time
def worker(x):
time.sleep(1)
return x
pool = multiprocessing.Pool()
print(pool.map(worker, range(10)))
আপনি পুলটিতে প্রক্রিয়াগুলির সংখ্যা নির্ধারণ করতে পারেন, উদাহরণস্বরূপ Pool(processes=5),। তবে এটি সিপিইউ গণনায় ডিফল্ট, সুতরাং এটি সিপিইউ-বাউন্ড কাজের জন্য ফাঁকা রাখুন। (ইনপুট / আউটপুট-বাউন্ড কর্ম প্রায়ই মামলা থ্রেড যাহাই হউক না কেন, থ্রেড বেশিরভাগই তাই অপেক্ষা করছে একটি CPU- র কোর ভাগ করে নিতে পারেন।) Poolএছাড়াও প্রযোজ্য অপ্টিমাইজেশান কদর্য ।
(দ্রষ্টব্য যে কোনও পদ্ধতির মধ্যে কর্মী পদ্ধতিতে বাসা বেঁধে দেওয়া যায় না I আমি প্রথমে আমার কর্মী পদ্ধতিটিকে কলটি করে এমন পদ্ধতির অভ্যন্তরে সংজ্ঞায়িত করেছি pool.map, যাতে এটি সমস্ত স্বাবলম্বিত হয়, তবে প্রক্রিয়াগুলি এটিকে আমদানি করতে পারেনি এবং "এট্রিবিউটআরার" ছুঁড়ে ফেলেছে) : স্থানীয় অবজেক্টকে আউটআর_মোথাল..আনার_মোথডো আচার দেওয়া যায় না "আরও এখানে । এটি কোনও শ্রেণীর অভ্যন্তরে থাকতে পারে))
(এর 'represent!'পরিবর্তে মূল প্রশ্নটি নির্দিষ্ট করা মুদ্রণের প্রশংসা করুন time.sleep(), তবে এটি না করেই আমি ভেবেছিলাম কিছু কোড একযোগে চলছিল না যখন তা ছিল না))
পাই 3 এর ProcessPoolExecutorদুটি লাইনও রয়েছে ( .mapএকটি জেনারেটর ফেরত দেয় যাতে আপনার প্রয়োজন হয় list()):
from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor() as executor:
print(list(executor.map(worker, range(10))))
সরল Processএস সহ:
import multiprocessing
import time
def worker(x, queue):
time.sleep(1)
queue.put(x)
queue = multiprocessing.SimpleQueue()
tasks = range(10)
for task in tasks:
multiprocessing.Process(target=worker, args=(task, queue,)).start()
for _ in tasks:
print(queue.get())
SimpleQueueআপনার প্রয়োজনীয় সমস্ত যদি putএবং হয় তবে ব্যবহার করুন get। প্রথম লুপটি সমস্ত প্রক্রিয়া শুরু করে, দ্বিতীয়টি ব্লকিং queue.getকল করার আগে। আমিও কল করার কোনও কারণ নেই বলে মনে করি p.join()না।
multiprocessing.Queueনা করে একটি ব্যবহার করার পরামর্শ দেবManager। একটি ব্যবহারেরManagerজন্য সম্পূর্ণ নতুন প্রক্রিয়া তৈরি হওয়া দরকার, যা যখন করা হয় তখন ওভারকিল হয়Queue।