در این مطلب، ویدئو چند پردازش در پایتون: قفل ها با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:13:18
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,030 –> 00:00:02,009
در این ویدیو
2
00:00:02,009 –> 00:00:04,410
ماژول چند پردازشی را ادامه می دهیم و
3
00:00:04,410 –> 00:00:05,819
به طور خاص
4
00:00:05,819 –> 00:00:08,670
قفل ها یا mutexes مترادف را بررسی می
5
00:00:08,670 –> 00:00:10,950
کنیم و خواهیم دید که چرا این
6
00:00:10,950 –> 00:00:12,750
نوع اشیاء در کتابخانه چند پردازشی
7
00:00:12,750 –> 00:00:15,059
ممکن است مفید باشند. به
8
00:00:15,059 –> 00:00:16,680
شما برای کدی که با استفاده
9
00:00:16,680 –> 00:00:18,779
از پردازش چندگانه می نویسید، بنابراین به
10
00:00:18,779 –> 00:00:21,270
طور خلاصه یک قفل یا mutex یک
11
00:00:21,270 –> 00:00:23,160
مکانیسم همگام سازی برای اعمال
12
00:00:23,160 –> 00:00:25,500
محدودیت در دسترسی به یک منبع در
13
00:00:25,500 –> 00:00:27,269
محیطی است که در آن رشته های اجرایی زیادی وجود دارد،
14
00:00:27,269 –> 00:00:28,710
بنابراین اولین مورد است.
15
00:00:28,710 –> 00:00:30,929
آن را از مقاله ویکیپدیا
16
00:00:30,929 –> 00:00:32,820
که در زیر در بخش نظرات به اینجا پیوند دادهام جمله کنید،
17
00:00:32,820 –> 00:00:34,950
بنابراین اگر
18
00:00:34,950 –> 00:00:37,500
میخواهید درباره قفلها و نحوه استفاده از آنها
19
00:00:37,500 –> 00:00:38,940
در زمینه علوم رایانه بیشتر
20
00:00:38,940 –> 00:00:40,500
بدانید، ادامه دهید و آن پیوند را بررسی کنید.
21
00:00:40,500 –> 00:00:41,940
بیشتر در مورد نحوه استفاده
22
00:00:41,940 –> 00:00:44,190
از قفل در ماژول پردازش چندگانه،
23
00:00:44,190 –> 00:00:46,440
بنابراین ما
24
00:00:46,440 –> 00:00:48,450
با یک مثال ساده تا حدودی ساختگی
25
00:00:48,450 –> 00:00:50,370
شروع می کنیم که در آن با مقدار شروع می
26
00:00:50,370 –> 00:00:52,020
کنیم و خواهیم داشت دو تابع،
27
00:00:52,020 –> 00:00:54,660
یک تابع یک عدد
28
00:00:54,660 –> 00:00:56,520
به این مقدار اضافه میکند و دیگری فقط
29
00:00:56,520 –> 00:00:58,410
مقداری مجموعه را از
30
00:00:58,410 –> 00:01:00,180
این مقدار کم میکند، بنابراین من فقط میروم
31
00:01:00,180 –> 00:01:01,859
و با نوشتن اصلی شروع
32
00:01:01,859 –> 00:01:02,969
میکنم و میگویم اگر
33
00:01:02,969 –> 00:01:06,450
نام زیرخط مساوی با خط زیر
34
00:01:06,450 –> 00:01:08,760
خط اصلی باشد، کاری که
35
00:01:08,760 –> 00:01:10,920
میخواهم انجام دهم این است که متغیری را تعریف
36
00:01:10,920 –> 00:01:13,110
میکنم که آن را فقط مجموع صدا
37
00:01:13,110 –> 00:01:14,850
میزنم و ابتدا آن را برابر با
38
00:01:14,850 –> 00:01:17,340
500 قرار میدهم. من این را چاپ می کنم تا
39
00:01:17,340 –> 00:01:19,409
بتوانیم تأیید کنیم که مجموع واقعاً 500 است
40
00:01:19,409 –> 00:01:22,350
و سپس می خواهم بگویم که مجموع برابر
41
00:01:22,350 –> 00:01:24,270
با تابعی است که هنوز باید بنویسیم
42
00:01:24,270 –> 00:01:27,960
که فقط به نام افزودن 500 بدون MP از
43
00:01:27,960 –> 00:01:29,850
عدم پردازش چندگانه است. و سپس ما
44
00:01:29,850 –> 00:01:32,340
متغیر کل را پاس می کنیم، بنابراین به طور کلی
45
00:01:32,340 –> 00:01:33,990
این متغیر را برابر
46
00:01:33,990 –> 00:01:35,909
با مقدار مجموعه ای 500 قرار می دهیم، آن را
47
00:01:35,909 –> 00:01:37,259
چاپ می کنیم و سپس
48
00:01:37,259 –> 00:01:39,960
آن مقدار را به این تابع منتقل می کنیم.
49
00:01:39,960 –> 00:01:43,140
تنها کاری که انجام می دهد این است که ما فقط 500
50
00:01:43,140 –> 00:01:44,939
به ارزشی که به آن می دهیم اضافه می کنیم و این
51
00:01:44,939 –> 00:01:46,770
کار را در چنین حالتی انجام می دهد. y که در آن
52
00:01:46,770 –> 00:01:48,570
بین هر
53
00:01:48,570 –> 00:01:50,759
عدد صحیحی که به این مقدار اضافه می شود کمی تأخیر طول می کشد و
54
00:01:50,759 –> 00:01:52,170
همانطور که ما تابع را می
55
00:01:52,170 –> 00:01:53,850
نویسیم خواهید دید که این به چه معناست و ما
56
00:01:53,850 –> 00:01:55,079
یکی دیگر را انجام می دهیم که تقریباً خواهد بود.
57
00:01:55,079 –> 00:01:57,119
به همین ترتیب، پس از فراخوانی
58
00:01:57,119 –> 00:01:58,200
آن تابع، آن را چاپ می
59
00:01:58,200 –> 00:02:00,000
کنیم تا بررسی کنیم که
60
00:02:00,000 –> 00:02:02,310
پس از این فراخوانی باید هزار عدد دریافت
61
00:02:02,310 –> 00:02:03,750
کنیم و سپس یک کار مشابه را انجام
62
00:02:03,750 –> 00:02:06,420
می دهیم که در آن می گوییم مجموع برابر با زیر 500 است.
63
00:02:06,420 –> 00:02:09,030
بدون MP و سپس ما آن را در مجموع میدهیم، بنابراین به
64
00:02:09,030 –> 00:02:10,288
طور کلی به روشی که در
65
00:02:10,288 –> 00:02:11,819
اینجا کار میکنیم، این مثال را
66
00:02:11,819 –> 00:02:13,530
بدون هیچ گونه پردازش چندگانه
67
00:02:13,530 –> 00:02:15,000
میبینیم، سپس آن را با
68
00:02:15,000 –> 00:02:16,500
چند پردازش و به نوعی میبینیم. این
69
00:02:16,500 –> 00:02:19,380
مشکل زمانی به وجود می آید که یک نوع
70
00:02:19,380 –> 00:02:21,450
تضاد دسترسی به یک متغیر مشترک وجود داشته باشد
71
00:02:21,450 –> 00:02:23,250
و سپس خواهیم دید که چگونه می توانیم از
72
00:02:23,250 –> 00:02:25,350
قفل ها برای کاهش این خطر
73
00:02:25,350 –> 00:02:26,640
74
00:02:26,640 –> 00:02:28,980
75
00:02:28,980 –> 00:02:30,600
استفاده کنیم. من فقط می خواهم مطمئن شوم که
76
00:02:30,600 –> 00:02:33,660
یک ماژول زمان را وارد می کنم تا بتوانیم آن را اضافه
77
00:02:33,660 –> 00:02:35,720
کنیم تأخیر است و سپس میخواهیم از
78
00:02:35,720 –> 00:02:40,020
فرآیند واردات چند پردازشی بگوییم، زیرا
79
00:02:40,020 –> 00:02:41,459
در نهایت از آن برای ایجاد
80
00:02:41,459 –> 00:02:43,920
فرآیندها استفاده میکنیم نه هنوز، بلکه
81
00:02:43,920 –> 00:02:45,989
در نهایت دوباره قفل میکنیم، در نهایت
82
00:02:45,989 –> 00:02:48,060
از آن استفاده میکنیم و ارزش در نهایت
83
00:02:48,060 –> 00:02:50,700
از آن برای ایجاد یک اشتراکگذاری استفاده میکند. مقداری که
84
00:02:50,700 –> 00:02:52,260
استفاده خواهد شد، اما در این مرحله ما
85
00:02:52,260 –> 00:02:54,450
از آن استفاده نمی کنیم، بنابراین بیایید ادامه دهیم
86
00:02:54,450 –> 00:02:56,900
و این توابع را ایجاد کنیم، بنابراین
87
00:02:56,900 –> 00:03:00,030
500 مگاپیکسل بدون چند پردازش اضافه کنید،
88
00:03:00,030 –> 00:03:01,800
یک متغیر می گیرد و سپس تمام
89
00:03:01,800 –> 00:03:03,330
کاری که انجام می دهد این است فقط
90
00:03:03,330 –> 00:03:05,640
یک عدد صحیح در یک زمان برای یک تاخیر مشخص اضافه می کند،
91
00:03:05,640 –> 00:03:08,790
بنابراین بیایید بگوییم برای من تا
92
00:03:08,790 –> 00:03:10,500
93
00:03:10,500 –> 00:03:13,080
94
00:03:13,080 –> 00:03:16,920
95
00:03:16,920 –> 00:03:18,030
دویست فقط میرویم و
96
00:03:18,030 –> 00:03:20,579
میگوییم مجموع بعلاوه برابر با پنج و سپس
97
00:03:20,579 –> 00:03:22,290
کل را برمیگردانیم، بنابراین تنها چیزی که در
98
00:03:22,290 –> 00:03:23,430
اینجا اتفاق میافتد
99
00:03:23,430 –> 00:03:25,980
این است که اعداد 0 تا 99 را که
100
00:03:25,980 –> 00:03:28,470
در یک خواب بسیار کوچک اضافه میکنیم، حلقه میزنیم. سپس
101
00:03:28,470 –> 00:03:30,150
درست قبل از آن یا درست بعد از آن در
102
00:03:30,150 –> 00:03:33,180
عوض ما 5 را به کل اضافه می کنیم
103
00:03:33,180 –> 00:03:34,620
که صد بار انجام می دهیم که
104
00:03:34,620 –> 00:03:36,750
500 به عدد ما اضافه می شود و سپس
105
00:03:36,750 –> 00:03:38,370
آن را برمی گردانیم و سپس
106
00:03:38,370 –> 00:03:39,810
عملکرد بسیار مشابهی
107
00:03:39,810 –> 00:03:41,220
خواهیم داشت که انجام می دهد. تقریباً دقیقاً همان چیزی است که
108
00:03:41,220 –> 00:03:43,410
فقط به جای اضافه کردن،
109
00:03:43,410 –> 00:03:44,910
فقط تفریق میشود، بنابراین من فقط
110
00:03:44,910 –> 00:03:46,769
نام را از add به sub تغییر میدهم،
111
00:03:46,769 –> 00:03:48,510
این به علاوه را به منفی تغییر میدهم و
112
00:03:48,510 –> 00:03:50,940
تقریباً تمام چیزی است که ما نیاز داریم، بنابراین فقط این
113
00:03:50,940 –> 00:03:52,650
تا حدودی ساختگی است، اما امیدواریم
114
00:03:52,650 –> 00:03:54,180
که سناریویی ایجاد شود که
115
00:03:54,180 –> 00:03:56,700
ممکن است کمی کلیتر و
116
00:03:56,700 –> 00:03:58,560
کاربردیتر باشد و امیدواریم نشان دهد که چرا
117
00:03:58,560 –> 00:04:00,239
قفلها در این مرحله مهم هستند،
118
00:04:00,239 –> 00:04:01,890
واقعاً مشخص نیست که قفلها چه ربطی
119
00:04:01,890 –> 00:04:03,299
به چیزی دارند، اما در نهایت در آنجا کار خواهند کرد،
120
00:04:03,299 –> 00:04:05,250
بنابراین اجازه دهید من فقط این را می نویسم
121
00:04:05,250 –> 00:04:07,260
و اجازه دهید برای ترمینال واضح بگویم و فر
122
00:04:07,260 –> 00:04:09,600
کنید یک پایتون چند پردازشی قف
123
00:04:09,600 –> 00:04:11,280
می کند اگر ما این را اجرا کنیم آنچه باید ان
124
00:04:11,280 –> 00:04:13,859
ظار داشته باشیم خروجی 500 عدد است که کل
125
00:04:13,859 –> 00:04:16,228
ن را چاپ می کنیم سپس 500 عدد به
126
00:04:16,228 –> 00:04:17,640
ن اضافه می کنیم. ما باید هزار را همانطور
127
00:04:17,640 –> 00:04:19,019
که p هستیم ببینیم در حال چاپ کردن آن و در واقع
128
00:04:19,019 –> 00:04:20,310
قبل از اجرای آن، من فقط
129
00:04:20,310 –> 00:04:21,839
پس از انجام تفریق دوباره یک کل را چاپ می کنم
130
00:04:21,839 –> 00:04:23,460
و باید به
131
00:04:23,460 –> 00:04:26,400
500 برگردیم، بنابراین با 500 شروع می کنیم و 500 را اضافه می کنیم
132
00:04:26,400 –> 00:04:28,380
500 از آن کم می کنیم که به مقدار اصلی شما برمی گردد.
133
00:04:28,380 –> 00:04:30,120
بنابراین بیایید ببینیم
134
00:04:30,120 –> 00:04:31,740
که در واقع همان چیزی است که ما به دست می آوریم، بنابراین ما
135
00:04:31,740 –> 00:04:34,800
500 هزار و سپس دوباره 500 داریم، بنابراین
136
00:04:34,800 –> 00:04:36,090
بسیار ساده است که
137
00:04:36,090 –> 00:04:37,800
هیچ چیز خیلی پیچیده ای در آنجا اتفاق نمی افتد،
138
00:04:37,800 –> 00:04:39,810
بنابراین اکنون اجازه دهید جلوتر برویم و آن را
139
00:04:39,810 –> 00:04:42,270
از روشی که در اینجا تعریف شده است
140
00:04:42,270 –> 00:04:44,550
به روشی تغییر دهیم. از قفل استفاده نمیکند اما
141
00:04:44,550 –> 00:04:46,800
از مقدار مشترکی که در
142
00:04:46,800 –> 00:04:48,479
اینجا وارد میکنیم استفاده میکند، بنابراین ما
143
00:04:48,479 –> 00:04:51,030
این شی یا کلاس را وارد
144
00:04:51,030 –> 00:04:52,800
میکنیم، بلکه مقداری را وارد میکنیم که یک شی از آن ایجاد
145
00:04:52,800 –> 00:04:54,990
میکنیم و میخواهیم بگوییم که کل
146
00:04:54,990 –> 00:04:57,120
اکنون برابر با 500 نیست، اما میخواهیم
147
00:04:57,120 –> 00:04:59,070
بگوییم که برابر است با مقدار منبع
148
00:04:59,070 –> 00:05:00,990
مشترک کتابخانه چند پردازشی،
149
00:05:00,990 –> 00:05:03,120
این مقدار دو آرگومان
150
00:05:03,120 –> 00:05:04,860
برای نوع داده و دیگری برای خود داده میگیرد،
151
00:05:04,860 –> 00:05:07,410
بنابراین باید آن را به عنوان یک آرگومان نشان دهم.
152
00:05:07,410 –> 00:05:09,930
عدد صحیح 500 به شهر به عنوان مقدار
153
00:05:09,930 –> 00:05:11,850
500 an ذکر شده است d من فقط میروم و
154
00:05:11,850 –> 00:05:14,789
فقط این موارد را حذف میکنم در حال حاضر کاری که
155
00:05:14,789 –> 00:05:15,810
میخواهیم انجام دهیم بهجای اینکه در واقع
156
00:05:15,810 –> 00:05:18,360
کل را تغییر دهیم، بنابراین در اینجا چیزی که در
157
00:05:18,360 –> 00:05:20,940
اینجا داریم این است که تنظیم میکنیم کل
158
00:05:20,940 –> 00:05:22,889
متغیر را برابر با آنچه از هر یک برگردانده میشود بازنشانی کنیم.
159
00:05:22,889 –> 00:05:24,690
از میان این توابع، اکنون کاری که من
160
00:05:24,690 –> 00:05:26,340
میخواهم انجام دهم این است که میخواهم از این
161
00:05:26,340 –> 00:05:28,770
متغیر در اینجا به عنوان یک منبع مشترک استفاده کنم، هر کدام
162
00:05:28,770 –> 00:05:30,389
از این توابع منبع مشترک را دستکاری میکنند
163
00:05:30,389 –> 00:05:32,760
و سپس
164
00:05:32,760 –> 00:05:34,110
برای هر یک از آن توابع فرآیندهایی ایجاد
165
00:05:34,110 –> 00:05:36,180
میکنیم و آنها را اجرا میکنیم و سپس ما به آنها ملحق خواهیم شد
166
00:05:36,180 –> 00:05:37,349
و سپس خواهیم دید که در پایان چه چیزی به دست می آوریم،
167
00:05:37,349 –> 00:05:39,450
بنابراین من فقط می خواهم به
168
00:05:39,450 –> 00:05:41,070
حذف این موارد در اینجا برگردم فقط می خواستم
169
00:05:41,070 –> 00:05:42,840
آن ها را بازگردانم تا توضیح بدهیم، بنابراین کاری که می
170
00:05:42,840 –> 00:05:43,740
خواهیم انجام دهیم این است که ما اکنون قصد داریم نام
171
00:05:43,740 –> 00:05:45,780
اینها را به جای MP مرد تغییر نام دهیم، ما
172
00:05:45,780 –> 00:05:47,880
فقط آنها را بدون قفل بنامیم،
173
00:05:47,880 –> 00:05:49,470
بنابراین از متغیر مشترک استفاده می کنیم، اما تا
174
00:05:49,470 –> 00:05:51,030
آن زمان اینقدر قفل برای شما ایجاد نمی کند،
175
00:05:51,030 –> 00:05:52,889
اما ایده کلی
176
00:05:52,889 –> 00:05:54,599
تقریباً این است که همان طور که
177
00:05:54,599 –> 00:05:57,000
اعداد 0 تا 99 را حلقه می زنیم
178
00:05:57,000 –> 00:05:58,530
و کمی o اضافه می کنیم. با یک تاخیر زمانی و
179
00:05:58,530 –> 00:05:59,970
سپس کاری که ما در اینجا
180
00:05:59,970 –> 00:06:02,430
انجام می دهیم این است که مقدار کل نقطه را می گوییم، بنابراین
181
00:06:02,430 –> 00:06:04,410
از آنجایی که اکنون یک
182
00:06:04,410 –> 00:06:07,500
شی مقدار را به روشی که
183
00:06:07,500 –> 00:06:09,930
به مقدار خود این شی دسترسی پیدا کرده و تغییر می دهیم، ارسال می کنیم.
184
00:06:09,930 –> 00:06:11,789
روش مقدار نقطه، بنابراین کاری که ما
185
00:06:11,789 –> 00:06:13,380
اکنون انجام می دهیم این است که ما فقط 5 را اضافه
186
00:06:13,380 –> 00:06:14,970
می کنیم، درست مانند قبل فقط با استفاده از این
187
00:06:14,970 –> 00:06:16,560
روش مقدار نقطه و سپس
188
00:06:16,560 –> 00:06:18,030
به جای برگرداندن، در واقع
189
00:06:18,030 –> 00:06:20,099
190
00:06:20,099 –> 00:06:21,720
منبع مشترک را دستکاری و اصلاح می کنیم، بنابراین من. میخواهیم از شر
191
00:06:21,720 –> 00:06:24,539
عبارات بازگشت خلاص شویم، بنابراین ما
192
00:06:24,539 –> 00:06:26,010
تغییر نام را در آنجا انجام میدهیم
193
00:06:26,010 –> 00:06:28,110
، مطمئن میشویم که روش مقدار را
194
00:06:28,110 –> 00:06:29,610
برای زیر یکی نیز انجام میدهیم و از
195
00:06:29,610 –> 00:06:31,500
دستور بازگشت خلاص میشویم، بنابراین ما
196
00:06:31,500 –> 00:06:33,660
کل متغیر مشترک خود را ایجاد کردهایم و سپس کاری که
197
00:06:33,660 –> 00:06:34,590
میخواهیم انجام دهیم این است که
198
00:06:34,590 –> 00:06:36,510
دو فرآیند ایجاد میکنیم، بنابراین
199
00:06:36,510 –> 00:06:38,849
میگوییم فرآیند را اضافه کنیم، آن را برابر با یک
200
00:06:38,849 –> 00:06:40,050
جدول فرآیند قرار
201
00:06:40,050 –> 00:06:41,610
میدهیم و یک موضوع فرآیند برای آن ایجاد میکنیم.
202
00:06:41,610 –> 00:0