چطور از multiprocessing.Pool.map با چندین آرگومان استفاده کنیم؟
How to use multiprocessing.Pool.map with multiple arguments?
وقتی دارم از multiprocessing.Pool.map در پایتون استفاده میکنم، متوجه شدم که فقط میتونم یک آرگومان به تابعی که میخوام مپ کنم، بدم. اما من نیاز دارم چندین آرگومان به این تابع پاس بدم. چطور میتونم این کار رو انجام بدم؟ آیا راهی هست که بتونم چند آرگومان رو با Pool.map هندل کنم؟
برای اینکه بتونی از multiprocessing.Pool.map با چندین آرگومان استفاده کنی، باید از تکنیکی به نام "unpacking" استفاده کنی. توی این روش، از تابع starmap یا یک lambda برای باز کردن آرگومانها در حین اجرای تابع استفاده میکنی. در ادامه یه نمونه کد ساده آوردم که این مفهوم رو نشون میده:
import multiprocessing def multiply(x, y): # Multiply two numbers and return the result return x * y if __name__ == '__main__': # Define the input data as a list of tuples data = [(1, 2), (3, 4), (5, 6), (7, 8)] # Create a Pool of worker processes with multiprocessing.Pool(processes=4) as pool: # Use starmap to apply the multiply function with multiple arguments results = pool.starmap(multiply, data) # Print the results print(results)
- تابع multiply دو آرگومان میگیره و نتیجه رو برمیگردونه.
- دادههای ورودی به صورت یه لیست از تاپلها تعریف میشن که هر تاپل شامل دو عدد هست.
- با استفاده از pool.starmap میتونی تابع multiply رو روی هر جفت از اعداد اعمال کنی.
اگه میخوای از map استفاده کنی، میتونی از lambda برای unpack کردن تاپلها کمک بگیری:
import multiprocessing def multiply(x, y): # Multiply two numbers and return the result return x * y if __name__ == '__main__': # Define the input data as a list of tuples data = [(1, 2), (3, 4), (5, 6), (7, 8)] # Create a Pool of worker processes with multiprocessing.Pool(processes=4) as pool: # Use map with lambda to unpack the tuples results = pool.map(lambda p: multiply(*p), data) # Print the results print(results)
توی این روش هم، از lambda استفاده شده تا هر تاپل رو باز کنه و به عنوان آرگومانهای مجزا به تابع multiply پاس بده. به این ترتیب، میتونی چندین آرگومان رو همزمان مدیریت کنی.
این روشها خیلی ساده و کاربردی هستن و در مواقعی که نیاز به پردازش موازی داری، بهت کمک زیادی میکنن.