concurrent.futures.ThreadPoolExecutor – قفل کردن منابع مشترک

Please login to bookmark Close

پیش‌نیاز

قبل از مطالعه این بخش، باید با مفهوم قفل کردن منابع مشترک و چرایی آن آشنا باشید.

قفل‌گذاری در concurrent.futures.ThreadPoolExecutor

برای قفل کردن ترد هایی که با این ماژول ساخته شده اند، از threading.Lock یا threading.RLock استفاده می‌کنیم.

from concurrent.futures import ThreadPoolExecutor
from threading import Lock

# تعریف قفل
lock = Lock()

def add():
    global number
    for _ in range(100000):
        # قفل کردن قبل از دسترسی به متغیر مشترک با استفاده از with
        with lock:
            number += 1

def subtract():
    global number
    for _ in range(100000):
        # قفل کردن قبل از دسترسی به متغیر مشترک با استفاده از with
        with lock:
            number -= 1

number = 0

# ایجاد و شروع وظایف با استفاده از ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=2) as executor:
    future1 = executor.submit(add)
    future2 = executor.submit(subtract)

    # منتظر ماندن برای اتمام وظایف
    future1.result()
    future2.result()

# چاپ مقدار نهایی number
print(number)
Please login to bookmark Close
نظرات

دیدگاهتان را بنویسید

فهرست مطالب

سرفصل دوره

تمرین

این قسمت تمرین ندارد!

پاسخ تمرین ها

هنوز برای تمرین‌های این قسمت پاسخی ثبت نشده است!

اشتراک گذاری

چرا بهتره از فیلترشکن استفاده کنید؟

من همه ویدئو ها و پادکست های کُدباز رو توی یوتیوب و ساندکلود و پلتفرم هایی آپلود می‌کنم که اغلب فیلتر هستند.

اغلب آموزش‌ها ویدئو و پادکست دارند. پس اگر می‌خواهید از محتوای سایت بیشترین استفاده رو ببرید نیاز به فیلتر شکن دارید.

توجه داشته باشید که برای خرید از فروشگاه بهتره فیلتر شکن رو خاموش کنید.

تنظیمات

انتخاب زبان
تغییر تم