در این مطلب، ویدئو Asyncio: درک Async / Await در پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:22:08
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,240 –> 00:00:02,000
بسیار خوب، پس ما می خواهیم کمی در مورد
2
00:00:02,000 –> 00:00:03,919
async io و python صحبت کنیم،
3
00:00:03,919 –> 00:00:06,240
بنابراین در مورد async و منتظر
4
00:00:06,240 –> 00:00:07,600
کلمات کلیدی است که چند سال پیش اضافه شده
5
00:00:07,600 –> 00:00:08,559
اند
6
00:00:08,559 –> 00:00:10,880
و چگونه می توانیم از آنها در پایتون استفاده کنیم
7
00:00:10,880 –> 00:00:11,759
و کمی
8
00:00:11,759 –> 00:00:14,000
در مورد تفاوت بین
9
00:00:14,000 –> 00:00:15,599
نوشتن async کد io
10
00:00:15,599 –> 00:00:17,440
و نوشتن کد رشته ای، زیرا این
11
00:00:17,440 –> 00:00:19,439
روش دیگری برای انجام همزمانی است،
12
00:00:19,439 –> 00:00:22,560
بنابراین همه اینها در مورد این است که چگونه می توانیم سرعت
13
00:00:22,560 –> 00:00:24,160
برنامه خود را افزایش دهیم چگونه می توانیم کارها را به
14
00:00:24,160 –> 00:00:25,119
صورت موازی
15
00:00:25,119 –> 00:00:29,039
انجام دهیم تا سرعت اجرا را بهبود ببخشیم،
16
00:00:29,039 –> 00:00:32,800
بنابراین روش های کاملاً متفاوتی برای
17
00:00:32,800 –> 00:00:34,800
انجام دادن داریم. همزمانی در پایتون
18
00:00:34,800 –> 00:00:36,800
ابتدا چند رشته ای وجود داشت
19
00:00:36,800 –> 00:00:38,239
که ساده ترین راه برای انجام
20
00:00:38,239 –> 00:00:40,239
همزمانی است، سپس
21
00:00:40,239 –> 00:00:41,440
چند پردازش وجود داشت
22
00:00:41,440 –> 00:00:43,600
که اگر به cpu بیشتری نیاز داشتید مشکل را حل می کند
23
00:00:43,600 –> 00:00:44,480
24
00:00:44,480 –> 00:00:46,480
زیرا یک فرآیند پایتون فقط می
25
00:00:46,480 –> 00:00:48,239
تواند یک cpu را مصرف کند در
26
00:00:48,239 –> 00:00:51,199
صورتی که شما نیاز به چند CPU داشته باشید
27
00:00:51,199 –> 00:00:52,960
زیرا شما مشکل بسیار Cpu
28
00:00:52,960 –> 00:00:53,760
فشرده است،
29
00:00:53,760 –> 00:00:56,160
پس شما نیاز به چند پردازش دارید، سپس
30
00:00:56,160 –> 00:00:57,920
رویدادهای g وجود دارد که ما در
31
00:00:57,920 –> 00:00:59,120
مورد آن زیاد صحبت نمی کنیم
32
00:00:59,120 –> 00:01:01,280
و سپس شما تعداد زیادی
33
00:01:01,280 –> 00:01:03,199
پیاده سازی مبتنی بر حلقه رویداد دارید،
34
00:01:03,199 –> 00:01:04,959
مانند e twisted وجود دارد که
35
00:01:04,959 –> 00:01:07,360
احتمالاً قدیمی ترین نسبت به چند مورد دیگر است
36
00:01:07,360 –> 00:01:11,600
و در سال 2012 ما async iu را دریافت کردیم،
37
00:01:11,600 –> 00:01:14,080
بنابراین بیایید ابتدا با آموزش شروع کنیم، بنابراین
38
00:01:14,080 –> 00:01:15,920
ترند کردن بسیار آسان است، شما دو
39
00:01:15,920 –> 00:01:18,080
تابع را در این مورد lsmbop تعریف کنید
40
00:01:18,080 –> 00:01:20,640
و سپس دو رشته ایجاد کنید که
41
00:01:20,640 –> 00:01:22,479
هر بار اول بگویید نقطه ورود
42
00:01:22,479 –> 00:01:24,080
اهداف آلیس بار دوم که
43
00:01:24,080 –> 00:01:25,200
می گویید هدف باب است
44
00:01:25,200 –> 00:01:29,680
و شروع می کنید، بنابراین اگر آن را اجرا کنیم،
45
00:01:29,680 –> 00:01:31,840
می بینید که این دو مورد به
46
00:01:31,840 –> 00:01:33,439
طور همزمان اجرا
47
00:01:33,439 –> 00:01:35,040
می شوند، هر دو عبارت چاپی را می بینید که به
48
00:01:35,040 –> 00:01:38,079
خوبی
49
00:01:38,159 –> 00:01:41,200
در هم قرار گرفته اند، حالا اگر این موضوعات پیچیده تر می شوند.
50
00:01:41,200 –> 00:01:41,680
51
00:01:41,680 –> 00:01:44,799
آنها باید
52
00:01:44,799 –> 00:01:46,399
با یکدیگر هماهنگ کنند، اگر مجبور
53
00:01:46,399 –> 00:01:48,320
به تبادل اطلاعات به نحوی
54
00:01:48,320 –> 00:01:49,920
مانند این مثال هستند، می
55
00:01:49,920 –> 00:01:51,520
بینید که یک شمارنده متغیر سراسری وجود دارد
56
00:01:51,520 –> 00:01:54,399
و هر دو رشته در حال تلاش برای
57
00:01:54,399 –> 00:01:56,159
دستکاری آن متغیر هستند،
58
00:01:56,159 –> 00:01:58,560
بنابراین اول ما یک افزایش انجام می دهیم
59
00:01:58,560 –> 00:02:00,479
و سپس ما در حال کاهش هستند
60
00:02:00,479 –> 00:02:02,320
و می بینید که هر دو رشته دقیقاً یک کار را انجام می دهند
61
00:02:02,320 –> 00:02:04,079
62
00:02:04,079 –> 00:02:08,800
و اکنون می توانیم سعی کنیم این را اجرا کنیم،
63
00:02:08,800 –> 00:02:11,599
بنابراین انتظار شما این است که برای
64
00:02:11,599 –> 00:02:14,080
هر i ncrement یک کاهش انجام می دهیم،
65
00:02:14,080 –> 00:02:15,760
بنابراین اگر مقدار
66
00:02:15,760 –> 00:02:17,760
شمارنده را در نقاط منظم زمانی
67
00:02:17,760 –> 00:02:20,480
چاپ کنیم، بسته به اینکه دقیقا چه زمانی مقدار را چاپ می کنیم، همیشه مقدار صفر را یک
68
00:02:20,480 –> 00:02:21,200
یا دو
69
00:02:21,200 –> 00:02:22,879
چاپ می کنیم،
70
00:02:22,879 –> 00:02:24,400
71
00:02:24,400 –> 00:02:29,200
بنابراین بیایید سعی کنیم این اسکریپت باشد،
72
00:02:29,200 –> 00:02:31,120
می بینید که دقیقاً این نیست.
73
00:02:31,120 –> 00:02:32,720
در حال حاضر ما مقادیر منفی را چاپ می کنیم، سپس
74
00:02:32,720 –> 00:02:34,400
دوباره مثبت می شود
75
00:02:34,400 –> 00:02:37,599
و هرچه ادامه می دهیم
76
00:02:37,599 –> 00:02:40,560
بیشتر و بیشتر از مقدار واقعی صفر واگرا می شویم،
77
00:02:40,560 –> 00:02:42,720
78
00:02:42,720 –> 00:02:46,480
بنابراین چگونه ممکن است،
79
00:02:46,480 –> 00:02:48,879
اجازه دهید این تابع بسیار ساده
80
00:02:48,879 –> 00:02:50,480
را با یک انتساب و یک
81
00:02:50,480 –> 00:02:51,599
افزایش در
82
00:02:51,599 –> 00:02:53,200
نظر بگیریم. میخواهید این تابع را از هم جدا
83
00:02:53,200 –> 00:02:55,120
کنید، میتوانید با وارد کردن این کتابخانه این کار را در پایتون انجام دهید
84
00:02:55,120 –> 00:02:55,680
85
00:02:55,680 –> 00:02:58,080
و سپس این کار را انجام دهید
86
00:02:58,080 –> 00:02:58,879
و
87
00:02:58,879 –> 00:03:01,519
f را پاس میکنید تا
88
00:03:01,519 –> 00:03:02,720
بایت کد آن گوشی
89
00:03:02,720 –> 00:03:05,840
این تابع را ببینید، سپس آن را در واقع
90
00:03:05,840 –> 00:03:07,440
برای
91
00:03:07,440 –> 00:03:09,440
افزایش متناظر میبینید. با این چهار
92
00:03:09,440 –> 00:03:10,879
دستور،
93
00:03:10,879 –> 00:03:13,760
امم که واقعاً یک دستورالعمل نیست
94
00:03:13,760 –> 00:03:16,159
، افزایشی مانند به علاوه مساوی صفر یا
95
00:03:16,159 –> 00:03:19,120
به علاوه مساوی یک متأسفم
96
00:03:19,120 –> 00:03:23,200
از این چهار دستورالعمل تشکیل شده
97
00:03:23,200 –> 00:03:26,640
است. مفسر پایتون
98
00:03:26,640 –> 00:03:29,760
روی پشته کار می کند
99
00:03:29,760 –> 00:03:32,080
اما بسیار جالب است، به این معنی که
100
00:03:32,080 –> 00:03:33,760
اگر ما دو رشته داشته باشیم که
101
00:03:33,760 –> 00:03:34,959
102
00:03:34,959 –> 00:03:36,879
در هر نقطه از زمان بین این
103
00:03:36,879 –> 00:03:38,799
دستورالعمل ها روی همان متغیر کار کنند، می توانیم از یک رشته
104
00:03:38,799 –> 00:03:40,080
به رشته دیگر برویم، به این
105
00:03:40,080 –> 00:03:41,920
معنی که این دو رشته می توانند
106
00:03:41,920 –> 00:03:44,080
احتمالاً با یکدیگر تداخل داشته باشند
107
00:03:44,080 –> 00:03:46,400
و این دقیقاً همان چیزی است که در این مثال اتفاق میافتد،
108
00:03:46,400 –> 00:03:48,080
109
00:03:48,080 –> 00:03:51,519
بنابراین راه حل آن با استفاده از یک
110
00:03:51,519 –> 00:03:52,480
قفل است
111
00:03:52,480 –> 00:03:54,159
تا بتوانید یک قفل ایجاد کنید و
112
00:03:54,159 –> 00:03:55,680
این بلوکها را احاطه کنید که در
113
00:03:55,680 –> 00:03:58,959
آن متغیر shift را با آن
114
00:03:58,959 –> 00:04:01,599
با مدیر زمینه قفل تغییر دهید و سپس شما
115
00:04:01,599 –> 00:04:03,439
از
116
00:04:03,439 –> 00:04:05,920
دستکاری همزمان یک متغیر توسط این دو رشته جلوگیری میکنید،
117
00:04:05,920 –> 00:04:08,480
118
00:04:09,120 –> 00:04:11,680
بنابراین چه اشکالی دارد یا
119
00:04:11,680 –> 00:04:12,799
مضرات
120
00:04:12,799 –> 00:04:16,160
استفاده از رشتهها این است که به محض
121
00:04:16,160 –> 00:04:16,798
اینکه باید
122
00:04:16,798 –> 00:04:19,759
ساختارهای داده مشترک را دستکاری کنید،
123
00:04:19,759 –> 00:04:21,440
باید به قفل کردن فکر کنید
124
00:04:21,440 –> 00:04:22,720
و این چیزی است که درست کردن بسیار سخت است،
125
00:04:22,720 –> 00:04:25,120
بنابراین یا
126
00:04:25,120 –> 00:04:28,160
انتخاب می کنید که از یک قفل جهانی استفاده کنید،
127
00:04:28,160 –> 00:04:31,280
اما بقیه
128
00:04:31,280 –> 00:04:33,759
موارد را دارید که اغلب آنها را قفل می کنید مانند چیزهایی که ممکن است خراب شوند.
129
00:04:33,759 –> 00:04:35,520
به موازات اینکه این چیزها
130
00:04:35,520 –> 00:04:37,840
متوالی می شوند یا
131
00:04:37,840 –> 00:04:40,880
از بسیاری از قفل های ریز دانه استفاده می کنید
132
00:04:40,880 –> 00:04:42,479
مانند برای هر ساختار داده که
133
00:04:42,479 –> 00:04:44,080
یک قفل ایجاد
134
00:04:44,080 –> 00:04:46,240
می کنید تا از تغییر آن
135
00:04:46,240 –> 00:04:47,520
توسط تهدیدات دیگر محافظت کنید
136
00:04:47,520 –> 00:04:48,639
و سپس خطر
137
00:04:48,639 –> 00:04:52,080
قفل شدن را دارید، راه هایی وجود دارد که از آن جلوگیری کنید،
138
00:04:52,080 –> 00:04:54,720
مانند برخی از دستورالعمل ها و غیره،
139
00:04:54,720 –> 00:04:57,040
اما درست کردن آن بسیار سخت است
140
00:04:57,040 –> 00:04:59,120
و سپس نخ ها مقداری سربار دارند
141
00:04:59,120 –> 00:05:00,320
نه زیاد،
142
00:05:00,320 –> 00:05:03,840
بنابراین واقعاً دلیل اصلی
143
00:05:03,840 –> 00:05:05,440
استفاده نکردن از نخ ها نیست، اما با این حال آنها
144
00:05:05,440 –> 00:05:07,759
کمی سربار دارند،
145
00:05:07,759 –> 00:05:10,240
من باید همچنین ذکر کنید که به جای
146
00:05:10,240 –> 00:05:11,840
استفاده از ساختارهای داده مشترک،
147
00:05:11,840 –> 00:05:15,039
نمیتوانید دادهها را بین رشتهها به اشتراک بگذارید،
148
00:05:15,039 –> 00:05:15,600
149
00:05:15,600 –> 00:05:18,080
اما از نوعی ارسال پیام استفاده کنید تا
150
00:05:18,080 –> 00:05:20,240
این رشتهها بتوانند
151
00:05:20,240 –> 00:05:22,720
از طریق یک صف ارتباط برقرار کنند و بنابراین اگر یک رشته
152
00:05:22,720 –> 00:05:24,000
باید دادهها را به رشتهای دیگر
153
00:05:24,000 –> 00:05:25,440
ارسال کند، میتوانید آن را از طریق رشته ارسال کنید. صف بندی و
154
00:05:25,440 –> 00:05:28,320
سریال سازی آن راهی برای جلوگیری از
155
00:05:28,320 –> 00:05:30,800
استفاده از قفل و جلوگیری از این مسائل است، اما
156
00:05:30,800 –> 00:05:32,400
این روش برنامه نویسی کاملاً متفاوتی است،
157
00:05:32,400 –> 00:05:34,479
158
00:05:34,479 –> 00:05:37,919
بنابراین بیایید به async io
159
00:05:37,919 –> 00:05:39,680
بیاییم و به ho نگاهی بیندازیم. ما
160
00:05:39,680 –> 00:05:41,520
میتوانیم این کارها را در async io
161
00:05:41,520 –> 00:05:43,520
انجام دهیم، بنابراین در اینجا دو تابع
162
00:05:43,520 –> 00:05:45,039
تابع یک و تابع دو نیز
163
00:05:45,039 –> 00:05:46,160
داریم و میخواهیم اینها را به
164
00:05:46,160 –> 00:05:48,320
صورت موازی اجرا کنیم و همان
165
00:05:48,320 –> 00:05:50,639
افزایش و کاهش را انجام دهیم،
166
00:05:50,639 –> 00:05:53,600
حالا میبینید که این توابع توابع عادی نیستند.
167
00:05:53,600 –> 00:05:55,440
168
00:05:55,440 –> 00:05:57,199
در جلوی کلمه کلیدی dev یک async وجود دارد که به این معنی است
169
00:05:57,199 –> 00:05:58,880
که این یک تابع ناهمزمان است
170
00:05:58,880 –> 00:06:02,240
و سپس یک awaits نیز وجود
171
00:06:02,240 –> 00:06:05,199
دارد که کلمه کلیدی await در اینجا در واقع
172
00:06:05,199 –> 00:06:05,600
به معنای
173
00:06:05,600 –> 00:06:08,560
این است که جایی است که
174
00:06:08,560 –> 00:06:10,960
رفتن از یک تابع به تابع دیگر خوب است،
175
00:06:10,960 –> 00:06:13,440
بنابراین اساساً ما هنگامی که
176
00:06:13,440 –> 00:06:15,120
ما سوئیچینگ پیچیده بین این دو تابع را انجام می دهیم، کنترل می شوند،
177
00:06:15,120 –> 00:06:16,639
178
00:06:16,639 –> 00:06:19,120
بنابراین اگر اکنون می خواهیم این را اجرا کنیم،
179
00:06:19,120 –> 00:06:21,280
این دو به طور همزمان اجرا می شوند،
180
00:06:21,280 –> 00:06:23,520
اما سوئیچ پیچیده بین این دو
181
00:06:23,520 –> 00:06:24,319
تابع،
182
00:06:24,319 –> 00:06:26,080
آنها فقط در جایی اتفاق می افتد که
183
00:06:26,080 –> 00:06:28,240
ما یک کلمه کلیدی انتظار داریم.
184
00:06:28,240 –> 00:06:30,479
خوابی است که در حال حاضر مهم نیست،
185
00:06:30,479 –> 00:06:32,639
اما فقط برای این است که این
186
00:06:32,639 –> 00:06:36,800
مثال کار کند، بنابراین اجازه دهید
187
00:06:37,680 –> 00:06:40,400
این مثال را ببینید، ما همیشه
188
00:06:40,400 –> 00:06:41,520
صفر را چاپ می کنیم،
189
00:06:41,520 –> 00:06:43,440
این همان چیزی است که هنگام اجرا دریافت می
190
00:06:43,440 –> 00:06:45,360
کنید اسکریپت
191
00:06:45,360 –> 00:06:49,919
um بنابراین کلمه کلیدی await
192
00:06:49,919 –> 00:06:51,919
در واقع به این معنی است که این مکانی است
193
00:06:51,919 –> 00:06:53,039
که
194
00:06:53,039 –> 00:06:55,120
برای یک تیم اصلی امن است که به تیم اصلی دیگر منتقل شود
195
00:06:55,120 –> 00:06:56,240
196
00:06:56,240 –> 00:06:59,280
که اساساً اکنون
197
00:06:59,280 –> 00:07:01,280
در عمل به معنای کمی بیشتر از
198
00:07:01,280 –> 00:07:03,599
این است که همچنین به این معنی است که شما
199
00:07:03,599 –> 00:07:04,160
احتمالاً
200
00:07:04,160 –> 00:07:08,080
منتظر بمانید تا مقداری از io تکمیل شود
201
00:07:08,080 –> 00:07:09,759
زیرا مشکلی که ما معمولاً سعی می کنیم
202
00:07:09,759 –> 00:07:11,599
با async io حل کنیم
203
00:07:11,599 –> 00:07:15,120
یک برنامه بسیار فشرده است
204
00:07:15,120 –> 00:07:17,199
و وقتی چیزهای زیادی به
205
00:07:17,199 –> 00:07:19,759
طور موازی در حال انجام است، نقطه خوبی برای رفتن از یک
206
00:07:19,759 –> 00:07:21,440
تیم اصلی به تیم اصلی دیگر
207
00:07:21,440 –> 00:07:22,960
این است که زمانی که کاری انجام نمیدهید بیکار هستید،
208
00:07:22,960 –> 00:07:24,960
مثلاً
209
00:07:24,960 –> 00:07:26,400
درخواست شبکه را انجام میدهید و منتظر میشوید
210
00:07:26,400 –> 00:07:27,840
تا پاسخ برسد و
211
00:07:27,840 –> 00:07:30,000
در این بین هیچ کاری انجام نمیدهید،
212
00:07:30,000 –> 00:07:31,840
بنابراین دقیقاً مکان مناسبی است که
213
00:07:31,840 –> 00:07:34,319
منطقی است به تیم اصلی دیگری بروید.
214
00:07:34,319 –> 00:07:37,440
و اجرا را از آنجا از سر بگیرید
215
00:07:37,440 –> 00:07:39,039
و بنابراین در واقع
216
00:07:39,039 –> 00:07:40,880
بین همه این پردهها
217
00:07:40,880 –> 00:07:42,720
در نقطهای که منتظر نبودهاید به عقب و جلو میروید،
218
00:07:42,720 –> 00:07:44,240
بنابراین کنترل کاملی
219
00:07:44,240 –> 00:07:47,440
بر روی تغییر متن دارید،
220
00:07:47,440 –> 00:07:48,960
بنابراین اساساً تفاوت بین
221
00:07:48,960 –> 00:07:50,560
خواندن و قرنطینه این است
222
00:07:50,560 –> 00:07:52,000
که رشتههایی پیشگیرانه هستند و
223
00:07:52,000 –> 00:07:54,000
سیستم عامل تصمیم میگیرد که چه زمانی سوئیچ زمینه را
224
00:07:54,000 –> 00:07:54,720
225
00:07:54,720 –> 00:07:56,800
با برنامههایی مانند آنچه در
226
00:07:56,800 –> 00:07:58,240
async
227
00:07:58,240 –> 00:08:00,160
داریم، تعیین میکند.
228
00:08:00,160 –> 00:08:01,360
229
00:08:01,360 –> 00:08:03,840
230
00:08:03,840 –> 00:08:05,840
قفل می شود
231
00:08:05,840 –> 00:08:08,319
زیرا ما می دانیم چه کدهایی از نظر
232
00:08:08,319 –> 00:08:10,240
آناتومیکی هستند و قطع نمی
233
00:08:10,240 –> 00:08:11,919
شوند، دقیقاً جایی است که
234
00:08:11,919 –> 00:08:13,759
وزن نداریم و بنابراین
235
00:08:13,759 –> 00:08:16,400
خیلی راحت تر است که کت خود را به حالت
236
00:08:16,400 –> 00:08:17,520
237
00:08:17,520 –> 00:08:19,039
موج درست تبدیل کنید، این احتمال وجود دارد
238
00:08:19,039 –> 00:08:20,560
که شما اشتباه کنید.
239
00:08:20,560 –> 00:08:22,639
در تولید، در برخی مواقع، همه چیز
240
00:08:22,639 –> 00:08:24,160
241
00:08:24,160 –> 00:08:26,720
با async شروع به شکستن میکند. به دست آوردن چیزها
242
00:08:26,720 –> 00:08:28,720
243
00:08:28,720 –> 00:08:32,000
در حال حاضر آسانتر است، مهم دانستن این است که همه
244
00:08:32,000 –> 00:08:32,559
اینها
245
00:08:32,559 –> 00:08:34,880
در واقع در بالای یک حلقه رویداد اجرا میشوند، بنابراین
246
00:08:34,880 –> 00:08:35,679
تزیین
247
00:08:35,679 –> 00:08:37,919
یک انتزاع در بالای یک
248
00:08:37,919 –> 00:08:39,120
حلقه
249
00:08:39,120 –> 00:08:41,360
رویداد یک رویداد. حلقه که یک نقشه برداری بسیار ساده است
250
00:08:41,360 –> 00:08:42,799
که در آن
251
00:08:42,799 –> 00:08:45,839
رویدادهای تکمیل io را به تماسهای برگشتی نگاشت میکنید،
252
00:08:45,839 –> 00:08:48,399
بهعنوان مثال، زمانی که سوکت شبکه
253
00:08:48,399 –> 00:08:48,959
254
00:08:48,959 –> 00:08:51,440
برای خواندن یا نوشتن آماده میشود
255
00:08:51,440 –> 00:08:52,720
زمانی که بیشترین
256
00:08:52,720 –> 00:08:54,880
شب کیبورد را دریافت میکنید. nts اینها رویدادها هستند و
257
00:08:54,880 –> 00:08:55,920
سپس شما
258
00:08:55,920 –> 00:08:59,200
یک callback را مشخص می کنید
259
00:08:59,200 –> 00:09:01,519
که زمانی که آن رویداد اتفاق می افتد اجرا می شود و این به
260
00:09:01,519 –> 00:09:02,320
معنای واقعی کلمه
261
00:09:02,320 –> 00:09:04,640
این مدت است، بنابراین منتظر می مانید تا یک
262
00:09:04,640 –> 00:09:06,560
توصیفگر فایل آماده
263
00:09:06,560 –> 00:09:08,720
شود و اسکریپت را به یک رویداد نگاشت و
264
00:09:08,720 –> 00:09:09,600
سپس
265
00:09:09,600 –> 00:09:11,920
تماس مربوطه را فراخوانی می کنید و
266
00:09:11,920 –> 00:09:14,480
آن را نگه می دارید. این کار را در یک حلقه انجام دهید،
267
00:09:14,480 –> 00:09:16,880
بنابراین اگر این را در ذهن داشته باشید، می بینید
268
00:09:16,880 –> 00:09:17,920
که ما فقط
269
00:09:17,920 –> 00:09:20,399
یک تماس برگشتی را در یک زمان درست اجرا می کنیم و این
270
00:09:20,399 –> 00:09:22,320
واقعاً مزیت حلقه های رویداد است که
271
00:09:22,320 –> 00:09:23,519
این تماس ها
272
00:09:23,519 –> 00:09:26,880
با یکدیگر تداخل ندارند، بنابراین
273
00:09:26,880 –> 00:09:29,200
همه چیز را در یک رشته اجرا می کنیم.
274
00:09:29,200 –> 00:09:32,160
275
00:09:32,800 –> 00:09:35,040
من گفته ام که هیچ
276
00:09:35,040 –> 00:09:37,200
هماهنگ سازی پیچیده ای مانند قفل کردن داده ها وجود ندارد
277
00:09:37,200 –> 00:09:40,080
و به همین ترتیب اشکال زدایی آن نیز بسیار آسان است
278
00:09:40,080 –> 00:09:41,600
زیرا اگر یک عبارت break در
279
00:09:41,600 –> 00:09:42,399
کد
280
00:09:42,399 –> 00:09:45,040
خود قرار دهید کل حلقه رویداد شما مسدود می شود و
281
00:09:45,040 –> 00:09:49,040
می توانید وضعیت همه کریت ها را بررسی کنید.
282
00:09:49,040 –> 00:09:51,120
و همچنین برای مدیریت موازی بسیاری از اتصالات عالی است،
283
00:09:51,120 –> 00:09:52,480
284
00:09:52,480 –> 00:09:53,920
مثلاً اگر هزاران
285
00:09:53,920 –> 00:09:56,480
اتصال مانند اتصالات سوکت های وب دارید
286
00:09:56,480 –> 00:09:58,959
و بیشتر اوقات بیکار هستند،
287
00:09:58,959 –> 00:10:00,000
حلقه رویداد عالی است. t
288
00:10:00,000 –> 00:10:01,760
زیرا می توانید همزمان برای تعداد زیادی توصیف کننده فایل منتظر بمانید،
289
00:10:01,760 –> 00:10:03,600
290
00:10:03,600 –> 00:10:05,120
سیستم عامل شما می تواند این کار را برای
291
00:10:05,120 –> 00:10:08,079
شما انجام دهد و سپس پاسخ تماسی را اجرا می کنید
292
00:10:08,079 –> 00:10:12,640
که مربوط به
293
00:10:12,640 –> 00:10:14,320
اتصال شبکه ورودی از جایی است که
294
00:10:14,320 –> 00:10:16,959
پیام را دریافت می کنید
295
00:10:16,959 –> 00:10:19,040
و البته بسیار ارزان تر از
296
00:10:19,040 –> 00:10:20,079
داشتن پیام است. یک رشته
297
00:10:20,079 –> 00:10:23,360
برای هر اتصال،
298
00:10:24,000 –> 00:10:26,240
یک نکته مهم که باید بدانید این است
299
00:10:26,240 –> 00:10:28,079
که نباید
300
00:10:28,079 –> 00:10:31,360
کدهای async io را با کدهای مسدودکننده سنتی یا
301
00:10:31,360 –> 00:10:33,040
مانند کدهای مسدود کننده معمولی که
302
00:10:33,040 –> 00:10:35,279
در برنامه های دیگر پیدا می کنید، ترکیب نکنید،
303
00:10:35,279 –> 00:10:37,519
برای مثال اگر از کتابخانه درخواست
304
00:10:37,519 –> 00:10:39,360
برای انجام درخواست های شبکه استفاده
305
00:10:39,360 –> 00:10:41,120
می کنید، این همان چیزی است که بسیاری از افراد در پایتون
306
00:10:41,120 –> 00:10:43,200
این کار را انجام میدهند، شما را مسدود میکنند تا درخواستی را انجام دهید و
307
00:10:43,200 –> 00:10:44,560
308
00:10:44,560 –> 00:10:46,640
بیانیه شما درخواست شما دستور دریافت میکند،
309
00:10:46,640 –> 00:10:49,120
310
00:10:49,120 –> 00:10:51,279
اگر بخواهید این