شما به این ویدیو دسترسی ندارید

در این ویدیو با semaphore در threading پایتون آشنا میشوید. semaphore وظیفه ای مشابه lock دارد اما برای زمان هایی استفاده میشود که نیاز داشته باشید در تعداد threadهایی که به shared resource متصل میشوند کنترل داشته باشید. در کلاس semaphore یک counter یا شمارشگر وجود دارد که تعداد threadهای متصل را کنترل میکند. هر بار که یک thread از متد acquire استفاده میکند یک عدد از این counter کم شده و هربار که از متد release استفاده میشود به این عدد اضافه میشود. زمانی که این عدد به صفر برسد هیچ thread دیگری پذیرفته نیست و باید منتظر بمانند. همچنین در این ویدیو با کلاس BoundedSemaphore هم آشنا میشوید. در کلاس semaphore اگر شما بیشتر از تعداد acquire از release استفاده کنید تعداد counter منفی شده و باعث میشود در مرحله بعد تعداد threadهای بیشتری کار کنند. برای حل این مشکل میتوانید از کلاس BoundedSemaphor استفاده کنید که در صورت منفی شدن counter پیغام خطای ValueError خواهد داد.



0

intro

14:41

رایگان

1

creating threads

10:14

رایگان

3

daemon

6:52

6

Lock

14:52

7

RLock

4:16

8

Semaphore

9:55

9

Timer

1:40

10

Event

10:15

11

done

1:12

رایگان

دوره های پیشنهادی

دوره آموزش asyncio در پایتون
دوره آموزش asyncio در پایتون
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش ردیس(redis)
دوره آموزش ردیس(redis)
تکمیل ضبط
امیرحسین بیگدلو
دوره اول آموزش فلسک(Flask)
دوره اول آموزش فلسک(Flask)
تکمیل ضبط
امیرحسین بیگدلو



ارسال نظر


حسن سلمانی

3 سال قبل پاسخ به نظر

ما از semaphore برای مدیریت منابع مشترک استفاده میکنیم. در مثال شما همزمان چند thread به مقدار num دسترسی دارند که درست نیست و rc منطقا باید اتفاق بیفتد 1- چرا rc اتفاق نیفتاده
2- semaphore همانند عمل lock و rlock باعت threadSafty میشود و مانند آن عمل میکند?
بعنوان مثال در نمونه مسئله ایی که در LOCK استفاده کردید اگر حلقه FOR بزرگ بود انگاه حافظه مشترک که متغییر num بوده به خوبی مسئله rc را نشان میدهد ولی برای یک حلقه کوچک جواب درست میدهد. برای مسئله شما جواب دو تابعی که add و subtract مقدار 0 میشده که درست بوده(جز یکبار) ولی اگر حلقه بزرگ در نظر گرفته شود به خوبی rc مشخص است. علت این مسئله چیست؟

ارسال نظر



امیرحسین بیگدلو

3 سال قبل

سلام
semaphore هم thread safe است.
همونطور که در ویدیو هم گفتم چه حلقه بزرگ باشه و چه کوچک، جوابی که بدست میاد قابل اعتماد نیست حتی اگر برای هزار بار پشت سر هم جواب درست برگشت داده شود.

مونگارد