এর উত্তরটি সংস্করণ- এবং পরিস্থিতি-নির্ভর। পাইথনের সাম্প্রতিক সংস্করণের সর্বাধিক সাধারণ উত্তর (৩.৩ থেকে) প্রথমে নীচে জেএফ সেবাস্তিয়ান বর্ণনা করেছেন । 1 এটি Pool.starmapপদ্ধতিটি ব্যবহার করে যা আর্গুমেন্ট টিপলসের ক্রম গ্রহণ করে। এরপরে এটি প্রতিটি টিপল থেকে স্বয়ংক্রিয়ভাবে আর্গুমেন্টগুলি প্যাক করে দেয় এবং তাদের প্রদত্ত ফাংশনে প্রেরণ করে:
import multiprocessing
from itertools import product
def merge_names(a, b):
return '{} & {}'.format(a, b)
if __name__ == '__main__':
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
with multiprocessing.Pool(processes=3) as pool:
results = pool.starmap(merge_names, product(names, repeat=2))
print(results)
# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
পাইথনের পূর্ববর্তী সংস্করণগুলির জন্য, যুক্তিগুলি সুস্পষ্টভাবে আনপ্যাক করার জন্য আপনাকে একটি সহায়ক ফাংশন লিখতে হবে। আপনি যদি ব্যবহার করতে চান তবে আপনার একটি প্রসঙ্গ পরিচালককে রূপান্তর withকরতে একটি মোড়ক লিখতে হবে Pool। (এটি নির্দেশ করার জন্য মুওনকে ধন্যবাদ ।)
import multiprocessing
from itertools import product
from contextlib import contextmanager
def merge_names(a, b):
return '{} & {}'.format(a, b)
def merge_names_unpack(args):
return merge_names(*args)
@contextmanager
def poolcontext(*args, **kwargs):
pool = multiprocessing.Pool(*args, **kwargs)
yield pool
pool.terminate()
if __name__ == '__main__':
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
with poolcontext(processes=3) as pool:
results = pool.map(merge_names_unpack, product(names, repeat=2))
print(results)
# Output: ['Brown & Brown', 'Brown & Wilson', 'Brown & Bartlett', ...
সহজ ক্ষেত্রে, একটি নির্দিষ্ট দ্বিতীয় যুক্তি সহ, আপনি এটি ব্যবহার করতে পারেন partialতবে কেবল পাইথন ২.7++।
import multiprocessing
from functools import partial
from contextlib import contextmanager
@contextmanager
def poolcontext(*args, **kwargs):
pool = multiprocessing.Pool(*args, **kwargs)
yield pool
pool.terminate()
def merge_names(a, b):
return '{} & {}'.format(a, b)
if __name__ == '__main__':
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
with poolcontext(processes=3) as pool:
results = pool.map(partial(merge_names, b='Sons'), names)
print(results)
# Output: ['Brown & Sons', 'Wilson & Sons', 'Bartlett & Sons', ...
1. এর বেশিরভাগই তাঁর উত্তর দ্বারা অনুপ্রাণিত হয়েছিল, সম্ভবত এটির পরিবর্তে গ্রহণ করা উচিত ছিল। তবে যেহেতু এটি শীর্ষে আটকে আছে তাই ভবিষ্যতের পাঠকদের জন্য এটি উন্নত করা ভাল বলে মনে হয়েছিল।
partialকরতেওlambdaপারি না বা করতেও পারি না। আমি মনে করি এটি অদ্ভুত উপায়ে করতে হবে যা ফাংশনগুলি সাব-প্রসেসিসগুলিতে (মাধ্যমেpickle) পাস করা হয় ।