در این مطلب، ویدئو James Saryerwinnie – دانلود یک میلیارد فایل در پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:28:18
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:07,340 –> 00:00:10,320
سلام به همه متشکرم از حضورتان در اینجا
2
00:00:10,320 –> 00:00:14,549
متشکرم چون همانطور که ذکر شد نام من
3
00:00:14,549 –> 00:00:17,490
جیمز است متاسفم وینی و امروز
4
00:00:17,490 –> 00:00:19,260
در مورد دانلود یک میلیارد
5
00:00:19,260 –> 00:00:22,410
فایل در پایتون صحبت خواهم کرد، بنابراین واقعاً این یک
6
00:00:22,410 –> 00:00:24,599
مطالعه موردی است برای اینکه بفهمیم آیا باید این کار را انجام دهیم یا خیر.
7
00:00:24,599 –> 00:00:25,890
با استفاده از multi-threading
8
00:00:25,890 –> 00:00:29,249
multi-processing async i/o و برای کمک به
9
00:00:29,249 –> 00:00:31,980
ایجاد انگیزه، فرض کنید به ما کاری
10
00:00:31,980 –> 00:00:35,400
داده شده است، بنابراین بگوییم وارد کار
11
00:00:35,400 –> 00:00:39,359
شده ایم و از ما خواسته شده است که کاری انجام دهیم، بنابراین
12
00:00:39,359 –> 00:00:40,920
وظیفه ما این است که این کار وجود داشته باشد. سرور راه دور
13
00:00:40,920 –> 00:00:44,190
که فایلها را ذخیره میکند و این فایلها
14
00:00:44,190 –> 00:00:46,680
را میتوان از طریق یک REST API در دسترس قرار داد،
15
00:00:46,680 –> 00:00:49,410
بنابراین وظیفه ما این است که
16
00:00:49,410 –> 00:00:51,420
همه فایلها را از این
17
00:00:51,420 –> 00:00:53,879
سرور راه دور بر روی دستگاه مشتری
18
00:00:53,879 –> 00:00:56,460
که قرار است کد ما را اجرا کند دانلود کنیم، بنابراین
19
00:00:56,460 –> 00:00:58,469
حداقل از نظر مفهومی به نظر میرسد. کاملاً
20
00:00:58,469 –> 00:01:01,620
ساده است و اگر
21
00:01:01,620 –> 00:01:02,969
جزئیات روشنگری را بخواهیم، میخواهید مط
22
00:01:02,969 –> 00:01:04,379
ئن شوید که مشکل را کاملاً درک کردهایم، بن
23
00:01:04,379 –> 00:01:06,600
براین ممکن است بپرسیم که چه دس
24
00:01:06,600 –> 00:01:08,130
گاهی قرار است روی چه دستگاهی اجرا شود، می
25
00:01:08,130 –> 00:01:09,360
دانید که آیا ما مجموعهای از ماشینها دا
26
00:01:09,360 –> 00:01:11,880
یم. یک ماشین واحد و بنابراین بیایید
27
00:01:11,880 –> 00:01:15,329
بگوییم برای این کار یک ماشین
28
00:01:15,329 –> 00:01:17,850
داریم که می توانیم از آن استفاده کنیم 16 هسته 64
29
00:01:17,850 –> 00:01:20,490
گیگابایت حافظه دارد، بنابراین ماشینی است
30
00:01:20,490 –> 00:01:22,020
که قدرت محاسباتی خوبی
31
00:01:22,020 –> 00:01:25,049
در اینجا دارد و ما می خواهیم در
32
00:01:25,049 –> 00:01:26,880
مورد شبکه بدانیم. تأخیر
33
00:01:26,880 –> 00:01:28,500
بین کلاینت و سرور به این صورت است که ما
34
00:01:28,500 –> 00:01:30,420
در سراسر قاره ها تماس برقرار می کنیم آیا
35
00:01:30,420 –> 00:01:32,189
در همان شبکه چه
36
00:01:32,189 –> 00:01:34,619
شکلی است و برای این منظور می گوییم که
37
00:01:34,619 –> 00:01:36,000
دستگاه مشتری در
38
00:01:36,000 –> 00:01:39,630
همان شبکه ای با سرویس است و سپس می پرسیم
39
00:01:39,630 –> 00:01:41,460
چگونه بسیاری از فایلها روی سرور راه دور هستند
40
00:01:41,460 –> 00:01:43,469
و همانطور که عنوان نشان میدهد
41
00:01:43,469 –> 00:01:45,899
میلیاردها فایل وجود دارد که باید آنها را دریافت کنیم، اما
42
00:01:45,899 –> 00:01:47,729
خوشبختانه فایلها نسبتاً کوچک هستند
43
00:01:47,729 –> 00:01:49,079
و ما واقعاً کوچک هستند، شما
44
00:01:49,079 –> 00:01:50,729
صد بایت در هر فایل دارید، بنابراین اندازه فایل نسبتاً کوچک
45
00:01:50,729 –> 00:01:53,490
است. و آخرین چیزی که
46
00:01:53,490 –> 00:01:55,140
همیشه باید بپرسیم این است که چه زمانی نیاز به انجام این
47
00:01:55,140 –> 00:01:57,420
کار دارید و البته ما پاسخ دلخواه را دریافت می کنیم،
48
00:01:57,420 –> 00:01:58,740
لطفاً در اسرع وقت این کار را انجام دهید،
49
00:01:58,740 –> 00:02:02,939
بنابراین
50
00:02:02,939 –> 00:02:04,590
قبل از شروع
51
00:02:04,590 –> 00:02:06,509
به بررسی رویکردهای مختلف خود، شروع به بررسی این API REST می کنیم.
52
00:02:06,509 –> 00:02:08,399
میخواهیم بفهمیم که این API چگونه درست کار میکند
53
00:02:08,399 –> 00:02:10,139
تا این مشکل را بهتر درک کنیم،
54
00:02:10,139 –> 00:02:13,020
بنابراین API که ما داریم
55
00:02:13,020 –> 00:02:15,690
البته یک API برای دریافت درست فایل وجود دارد، فقط
56
00:02:15,690 –> 00:02:17,250
با دادن یک نام فایل، میتوانید
57
00:02:17,250 –> 00:02:19,450
محتویات فایل را دانلود کنید، همچنین
58
00:02:19,450 –> 00:02:20,920
این قابلیت وجود دارد که فایلها را فهرست کنید، بنابراین باید
59
00:02:20,920 –> 00:02:22,330
بدانیم چه فایلهایی در سرویس در دسترس هستند
60
00:02:22,330 –> 00:02:24,340
و نحوه عملکرد این API
61
00:02:24,340 –> 00:02:26,230
به روشی است که بسیاری از کارهای api
62
00:02:26,230 –> 00:02:27,940
که نتیجه بزرگی دارند صفحه خود را تنظیم
63
00:02:27,940 –> 00:02:30,220
میکنند، به جای اینکه یک میلیارد فایل را برگردانید، بنابراین را اضافه کنید
64
00:02:30,220 –> 00:02:31,690
و میگوید اینجاست. همه فایلهای
65
00:02:31,690 –> 00:02:33,550
این سرور در عوض
66
00:02:33,550 –> 00:02:36,400
مقدار ثابتی از فایلها را در یک زمان معین به شما میدهد،
67
00:02:36,400 –> 00:02:39,090
بنابراین هزار فایل را برای یک صفحه
68
00:02:39,090 –> 00:02:42,160
بگویید و هزار نام فایل
69
00:02:42,160 –> 00:02:44,500
و سپس یک نشانگر برای دریافت صفحه بعدی خواهید داشت
70
00:02:44,500 –> 00:02:46,720
که اساساً این است. آن را مانند
71
00:02:46,720 –> 00:02:48,010
یک اشاره گر به صفحه بعدی نتایج در نظر بگیرید
72
00:02:48,010 –> 00:02:50,140
و بنابراین به طور مشخص یک
73
00:02:50,140 –> 00:02:52,540
نام فایل پاسخ JSON خواهیم داشت که لیستی از
74
00:02:52,540 –> 00:02:54,849
فایل ها است و سپس نشانگر بعدی که
75
00:02:54,849 –> 00:02:56,620
نشانه صفحه بندی ما است، بنابراین می توانیم
76
00:02:56,620 –> 00:02:58,450
صفحه بعدی نتیجه را دریافت کنیم و گرم کنیم. می توان به
77
00:02:58,450 –> 00:03:00,970
طور متوالی در تمام فایلها
78
00:03:00,970 –> 00:03:03,040
ادامه دهید تا زمانی که نشانگر بعدی را دریافت نکنیم، به این معنی
79
00:03:03,040 –> 00:03:06,340
که همه فایلهای فهرست شده خوب هستند، بنابراین
80
00:03:06,340 –> 00:03:09,340
اگر به
81
00:03:09,340 –> 00:03:10,959
یکی دیگر همانطور که در زیر در
82
00:03:10,959 –> 00:03:12,579
ستون سوم یا ردیف سوم در آنجا نشان داده شده است نگاه کنیم API لیست است.
83
00:03:12,579 –> 00:03:14,650
یک نام فایل دریافت اسلش وجود دارد که محتویات فایل را
84
00:03:14,650 –> 00:03:17,079
به ما می دهد، بنابراین
85
00:03:17,079 –> 00:03:18,280
این API است که ما با آن کار می کنیم،
86
00:03:18,280 –> 00:03:19,810
کمی عجیب است که لیستی مانند لیست وجود دارد و
87
00:03:19,810 –> 00:03:22,959
در URL قرار می گیرد، اما می دانید که این چیزی است که ما
88
00:03:22,959 –> 00:03:26,290
داریم و بنابراین فکر می کنم اکنون ما به اندازه کافی
89
00:03:26,290 –> 00:03:27,730
برای درک مشکل و شروع
90
00:03:27,730 –> 00:03:29,170
آزمایش با چند
91
00:03:29,170 –> 00:03:31,510
رویکرد مختلف در اینجا قبل از ورود به
92
00:03:31,510 –> 00:03:33,489
این موضوع که چند نکته وجود دارد فقط برای
93
00:03:33,489 –> 00:03:36,880
اطمینان از اینکه هیچکسی که هیچ کس دوستش
94
00:03:36,880 –> 00:03:39,880
ندارد این را قبول نمی کند یا از دست می دهد آن چیزی را که
95
00:03:39,880 –> 00:03:41,530
من می خواهم نخواند. در این گفتگو نشان میدهیم که
96
00:03:41,530 –> 00:03:44,290
این یک مطالعه موردی ساده است،
97
00:03:44,290 –> 00:03:45,459
نتایج اینجا لزوماً
98
00:03:45,459 –> 00:03:48,130
تعمیم نمییابند، بنابراین فقط به این دلیل که ممکن است
99
00:03:48,130 –> 00:03:49,870
i/o async جلوتر باشد یا چند
100
00:03:49,870 –> 00:03:51,340
رشتهای جلوتر باشد، لزوماً به این معنی
101
00:03:51,340 –> 00:03:53,470
نیست که همیشه باید از آن استفاده کنید.
102
00:03:53,470 –> 00:03:56,350
واقعا همینطوره فقط نشان دادن یک مورد استفاده خاص
103
00:03:56,350 –> 00:03:58,180
در اینجا مطالعه موردی خاص که نشان میدهد برای
104
00:03:58,180 –> 00:04:00,519
این مشکل با این مشتری در این
105
00:04:00,519 –> 00:04:02,620
محیط در این شبکه، این همان چیزی است که
106
00:04:02,620 –> 00:04:05,230
برای من کار میکند، اما فکر
107
00:04:05,230 –> 00:04:06,730
میکنم گاهی اوقات داشتن یک مثال ملموس
108
00:04:06,730 –> 00:04:09,280
هنوز هم در بسیاری از مواقع واقعاً مفید است.
109
00:04:09,280 –> 00:04:10,690
یکی از چیزهایی که من با آن دست و پنجه
110
00:04:10,690 –> 00:04:13,120
نرم می کنم این است که شما ممکن است بفهمید که چگونه می گوییم
111
00:04:13,120 –> 00:04:14,829
چند رشته ای یا چند پردازشی کار می کند،
112
00:04:14,829 –> 00:04:16,358
اما واقعاً درک اینکه چه زمانی
113
00:04:16,358 –> 00:04:17,680
باید از یکی بر دیگری استفاده
114
00:04:17,680 –> 00:04:19,389
کنید مبادلات چیست، هنوز کمی
115
00:04:19,389 –> 00:04:21,488
چالش برانگیز است و امیدوارم با به اشتراک گذاری
116
00:04:21,488 –> 00:04:24,510
برخی از این دادهها امروز در اینجا میتواند به مردم کمک کند تا
117
00:04:24,510 –> 00:04:26,740
آگاهتر شوند که برخی از
118
00:04:26,740 –> 00:04:29,099
این معاوضهها خوب است،
119
00:04:29,099 –> 00:04:30,889
بنابراین
120
00:04:30,889 –> 00:04:32,840
من میگویم اگرچه همیشه نمایه همیشه
121
00:04:32,840 –> 00:04:34,789
برای خودت آزمایش میکنی، میدانی که
122
00:04:34,789 –> 00:04:36,650
واقعاً نمیتوانی از آن دور بزنی که
123
00:04:36,650 –> 00:04:39,500
هنوز آن را داری. همیشه این کار را انجام دهید، اما
124
00:04:39,500 –> 00:04:40,909
بیایید وارد رویکردهای مختلف
125
00:04:40,909 –> 00:04:42,379
شویم، بنابراین قبل از انجام هر یک از این موارد چند
126
00:04:42,379 –> 00:04:44,270
پردازشی یا غیرهمگام i/o، شاید
127
00:04:44,270 –> 00:04:45,710
بتوانیم فقط از یک نسخه همزمان استفاده
128
00:04:45,710 –> 00:04:47,389
کنیم، این ساده ترین نسخه است. g که کار می کند، شاید
129
00:04:47,389 –> 00:04:48,949
اگر به اندازه کافی خوب باشد، پس ما مجبور نیستیم
130
00:04:48,949 –> 00:04:51,289
کار دیوانه وار انجام دهیم، بحث آنقدر جالب نخواهد بود
131
00:04:51,289 –> 00:04:52,819
، اما می دانید که
132
00:04:52,819 –> 00:04:54,199
حداقل باید مطمئن شویم که کار می کند
133
00:04:54,199 –> 00:04:56,360
و ببینیم زمان بندی چگونه به نظر می رسد
134
00:04:56,360 –> 00:04:58,969
و چگونه خواهد بود. اینجا با همزمانی
135
00:04:58,969 –> 00:05:00,710
منظورم را روشن کنید شاید فقط بتوانیم لیستی تهیه کنیم
136
00:05:00,710 –> 00:05:02,960
و سپس بتوانیم هر یک از
137
00:05:02,960 –> 00:05:04,849
این فایل ها را اینجا مرور کنیم و سپس آنها را
138
00:05:04,849 –> 00:05:07,789
یکی یکی دانلود کنیم، بنابراین بگوییم برای هر فایل در یک
139
00:05:07,789 –> 00:05:09,469
صفحه فایل را دانلود کنید فایل را دانلود کنید
140
00:05:09,469 –> 00:05:10,789
و سپس هنگامی که کار را با آن تمام کردید
141
00:05:10,789 –> 00:05:13,250
صفحه بعدی را دریافت کنید و سپس بروید
142
00:05:13,250 –> 00:05:16,849
همه آن فایل ها را می شناسید، بنابراین کد برای
143
00:05:16,849 –> 00:05:19,250
آن نسبتاً ساده است، ما فقط
144
00:05:19,250 –> 00:05:20,539
از درخواست ها استفاده می کنیم و سپس فقط یک
145
00:05:20,539 –> 00:05:22,039
حلقه for برای رفتن به همه این صفحات داریم.
146
00:05:22,039 –> 00:05:24,259
روشی که این کد کار می کند این است که
147
00:05:24,259 –> 00:05:25,610
ما چندین ثابت در بالا داریم که
148
00:05:25,610 –> 00:05:28,759
با API که در اسلاید قبلی دیدیم مطابقت دارد
149
00:05:28,759 –> 00:05:32,509
و سپس اولین
150
00:05:32,509 –> 00:05:34,729
درخواستی را داریم که درخواست لیست است، بنابراین
151
00:05:34,729 –> 00:05:36,440
اولین مجموعه اولیه فایل ها را دریافت می کنیم.
152
00:05:36,440 –> 00:05:38,150
و سپس ما فقط یک حلقه for در اینجا و
153
00:05:38,150 –> 00:05:40,159
برای ea داریم فایل ch در نام فایل،
154
00:05:40,159 –> 00:05:42,020
ما برای دانلود فایل تماس
155
00:05:42,020 –> 00:05:43,400
می گیریم و در عرض یک ثانیه به آن تعریف نگاه می کنیم
156
00:05:43,400 –> 00:05:46,219
و بعد از آن بررسی می کنیم
157
00:05:46,219 –> 00:05:48,349
که آیا صفحات دیگری وجود دارد، بنابراین اگر این نشانگر بعدی وجود داشت،
158
00:05:48,349 –> 00:05:49,909
می گوییم خوب است
159
00:05:49,909 –> 00:05:51,669
درخواستها من این URL بعدی را دریافت میکنم
160
00:05:51,669 –> 00:05:54,680
که نشانگر بعدی را در اینجا در
161
00:05:54,680 –> 00:05:57,849
رشته پرس و جو ارائه میکند و ما فقط روی آن حلقه
162
00:05:57,849 –> 00:05:59,990
میزنیم تا زمانی که شما تمام شود تا زمانی که
163
00:05:59,990 –> 00:06:01,729
همه فایلهایمان را دانلود کنیم و بنابراین این
164
00:06:01,729 –> 00:06:04,490
فایل دانلودی در اینجا نیز آنقدرها
165
00:06:04,490 –> 00:06:05,870
خط کد نیست. در اینجا ما فقط یک
166
00:06:05,870 –> 00:06:08,539
درخواست برقراری تماس با این URL راه دور
167
00:06:08,539 –> 00:06:10,759
را انجام می دهیم تا مطمئن شویم که
168
00:06:10,759 –> 00:06:12,889
یک کد وضعیت 200 وجود دارد و سپس
169
00:06:12,889 –> 00:06:14,509
نام فایل محلی را که به ما
170
00:06:14,509 –> 00:06:17,120
منتقل شده است باز می کنیم و سپس داده ها را در
171
00:06:17,120 –> 00:06:19,279
آن فایل می نویسیم. بنابراین
172
00:06:19,279 –> 00:06:21,500
اگر به مدت زمانی که
173
00:06:21,500 –> 00:06:25,039
برای انجام یک درخواست طول می کشد به نقطه صفر صفر
174
00:06:25,039 –> 00:06:27,289
سه ثانیه نگاه کنیم این یک نتایج همزمان است، بنابراین این اساساً
175
00:06:27,289 –> 00:06:29,479
تأخیر شبکه برای ایجاد یک
176
00:06:29,479 –> 00:06:31,969
درخواست منفرد استهلاک شده از طریق لیست تماس ها
177
00:06:31,969 –> 00:06:35,509
و تماس دریافت و هزینه های اضافی است.
178
00:06:35,509 –> 00:06:36,949
پردازش آن در pyth در ادامه و
179
00:06:36,949 –> 00:06:38,210
مرور کتابخانه درخواست، پس سه
180
00:06:38,210 –> 00:06:40,759
میلی ثانیه فکر می کنید خوب است، خوب
181
00:06:40,759 –> 00:06:42,220
است،
182
00:06:42,220 –> 00:06:44,810
اگر سه میلی ثانیه را
183
00:06:44,810 –> 00:06:48,680
ضرب کنیم و آن را در 1 میلیارد ضرب کنیم،
184
00:06:48,680 –> 00:06:52,759
به 3 میلیون ثانیه می رسد که 833
185
00:06:52,759 –> 00:06:55,130
ساعت یا حدود سی و چهار نقطه هفت
186
00:06:55,130 –> 00:06:57,650
روز است، بنابراین فکر می کنم اگر ما باید بگوییم بسیار خوب،
187
00:06:57,650 –> 00:07:00,169
ما این نسخه را در حال اجرا داریم و
188
00:07:00,169 –> 00:07:01,940
تقریباً یک ماه دیگر این کار را انجام خواهیم داد تا یک ماه دیگر
189
00:07:01,940 –> 00:07:03,020
بررسی کنیم و این کار را انجام خواهیم داد
190
00:07:03,020 –> 00:07:04,550
که احتمالاً درست کار نمی کند،
191
00:07:04,550 –> 00:07:06,530
بنابراین می دانیم که نسخه همگام
192
00:07:06,530 –> 00:07:08,569
نیست. این به اندازه کافی خوب نیست و ما باید
193
00:07:08,569 –> 00:07:09,590
چیزی را پیدا کنیم که
194
00:07:09,590 –> 00:07:13,550
کمی سریعتر باشد، بنابراین اکنون می توانیم
195
00:07:13,550 –> 00:07:14,900
به چند رشته
196
00:07:14,900 –> 00:07:16,699
ای برسیم این اولین چیزی است که ما به آن نگاه می کنیم خوب است
197
00:07:16,699 –> 00:07:18,410
زیرا برای مدتی در پایتون بوده است.
198
00:07:18,410 –> 00:07:19,970
مدت زیادی است که چیزهای زیادی
199
00:07:19,970 –> 00:07:21,229
در مورد آن نوشته شده است که به خوبی
200
00:07:21,229 –> 00:07:22,910
مطالعه شده است، بنابراین
201
00:07:22,910 –> 00:07:25,210
شروع به کار با کد چند رشته ای بسیار آسان است
202
00:07:25,210 –> 00:07:27,370
و چیزی که در اینجا از آن استفاده می
203
00:07:27,370 –> 00:07:30,139
کنیم صف تولیدکننده-مصرف کننده است، این یک
204
00:07:30,139 –> 00:07:31,580
استاندارد نسبتاً استاندارد است. الگوی زمانی که شما هستید
205
00:07:31,580 –> 00:07:32,990
با استفاده از کدهای چند رشته ای یا حتی در
206
00:07:32,990 –> 00:07:34,280
پردازش چندگانه که در ادامه به آن می پردازیم،
207
00:07:34,280 –> 00:07:34,699
208
00:07:34,699 –> 00:07:36,289
اما کاری که می خواهیم انجام دهیم این
209
00:07:36,289 –> 00:07:37,759
است که یک صفحه از نتایج
210
00:07:37,759 –> 00:07:39,139
را می گیریم و سپس به جای دانلود آن چیزی که می
211
00:07:39,139 –> 00:07:40,639
خواهیم انجام دهیم، قرار است آن را در یک
212
00:07:40,639 –> 00:07:42,919
صف قرار دهیم و سپس از آن مکعب
213
00:07:42,919 –> 00:07:44,180
، رشتههای کارگری
214
00:07:44,180 –> 00:07:46,120
خواهیم داشت که آن صف را میکشند و
215
00:07:46,120 –> 00:07:49,460
آن فایلها را همزمان دانلود میکنند و
216
00:07:49,460 –> 00:07:51,169
سپس در رشته اصلی، این
217
00:07:51,169 –> 00:07:53,180
شی لیست یا این لیست فایلهایی است که به
218
00:07:53,180 –> 00:07:54,889
کار خود ادامه میدهند و فقط
219
00:07:54,889 –> 00:07:56,210
چیزها را در صف قرار میدهد
220
00:07:56,210 –> 00:07:57,380
و شما فقط میخواهید این کارگران به
221
00:07:57,380 –> 00:07:59,330
طور مداوم این فایلها را دانلود کنند و
222
00:07:59,330 –> 00:08:01,389
سپس در پایان از آن
223
00:08:01,389 –> 00:08:03,530
کارگران میخواهیم نتایج را در صف نتیجه قرار دهند.
224
00:08:03,530 –> 00:08:05,360
این چیزی است که ما می توانیم وضعیت را ردیابی کنیم،
225
00:08:05,360 –> 00:08:07,430
می توانیم پیشرفت را ردیابی کنیم و به خطاها نگاه کنیم
226
00:08:07,430 –> 00:08:10,130
و این نوع چیزها و یکی از
227
00:08:10,130 –> 00:08:11,900
مشاهدات در اینجا این است که ما سعی می کنیم
228
00:08:11,900 –> 00:08:14,090
دروغ ها را تا جایی که می توانیم موازی کنیم، بنابراین اگر
229
00:08:14,090 –> 00:08:15,710
متوجه شدید با لیست تماس بگیرید که
230
00:08:15,710 –> 00:08:17,570
ذاتا سریال است، درست وجود دارد راهی
231
00:08:17,570 –> 00:08:19,490
برای دویدن نیست چندین لیست را به صورت موازی فراخوانی می کنیم
232
00:08:19,490 –> 00:08:21,199
زیرا برای انجام فراخوانی لیست بعدی
233
00:08:21,199 –> 00:08:23,090
باید نشانگر بعدی را داشته
234
00:08:23,090 –> 00:08:24,949
باشیم که از آن پاسخ قبلی بود، بنابراین
235
00:08:24,949 –> 00:08:26,990
باید به ترتیب پیش برویم، اما زمانی که
236
00:08:26,990 –> 00:08:28,849
آن هزار فایل را داشتیم، همه آنها می توانند به
237
00:08:28,849 –> 00:08:30,469
صورت موازی انجام شوند. سعی می کنیم
238
00:08:30,469 –> 00:08:32,630
مطمئن شویم که چیزهایی داریم که
239
00:08:32,630 –> 00:08:33,919
می توانند به صورت موازی اجرا شوند یا به صورت موازی اجرا شوند
240
00:08:33,919 –> 00:08:36,229
و سپس چیزهایی که جدا نیستند از
241
00:08:36,229 –> 00:08:38,270
هم جدا شوند، اما ما همچنین این
242
00:08:38,270 –> 00:08:40,399
جداسازی خوب را نیز داریم، بنابراین
243
00:08:40,399 –> 00:08:43,149
فایل های لیست کاملاً مستقل هستند.
244
00:08:43,149 –> 00:08:47,420
از بارگیری فایلها، اکنون
245
00:08:47,420 –> 00:08:49,940
کد این کار دوباره نسبتاً
246
00:08:49,940 –> 00:08:51,350
ساده
247
00:08:51,350 –> 00:08:53,660
است، در اینجا خطوط کد زیادی وجود ندارد، شبیه به
248
00:08:53,660 –> 00:08:55,040
ابتدای آن است که در آن یک تنظیم ثابت داریم
249
00:08:55,040 –> 00:08:58,279
، اما سپس دو نشانه را داریم
250
00:08:58,279 –> 00:09:00,440
که در نمودار دیدیم و سپس ما
251
00:09:00,440 –> 00:09:01,759
رشتههای کارگر خود را راهاندازی میکنیم، بنابراین
252
00:09:01,759 –> 00:09:03,889
تعدادی رشته در اینجا داریم و برای هر یک از آن
253
00:09:03,889 –> 00:09:05,209
رشتهها، آنها را با
254
00:09:05,209 –> 00:09:06,649
این تابع نخ کاری راهاندازی میکنیم و به
255
00:09:06,649 –> 00:09:08,720
زودی به آن تعریف نگاه میکنیم و سپس
256
00:09:08,720 –> 00:09:10,160
یک نتیجه را نیز راهاندازی میکنیم. رشتهای که
257
00:09:10,160 –> 00:09:11,569
قرار است در صف
258
00:09:11,569 –> 00:09:14,389
نتیجهای که نتایج را چاپ میکند میکشد، بنابراین اگر
259
00:09:14,389 –> 00:09:16,370
به حلقه اصلی واقعی
260
00:09:16,370 –> 00:09:17,750
اینجا نگاه کنیم، بسیار شبیه به
261
00:09:17,750 –> 00:09:19,459
نسخه همزمان است، بنابراین ما در
262
00:09:19,459 –> 00:09:20,870
هر یک از صفحات خود مرور میکنیم، این همان رشته اصلی است که
263
00:09:20,870 –> 00:09:22,730
این کار را انجام میدهد. لیست فراخوانی و تنها
264
00:09:22,730 –> 00:09:24,649
تفاوت این است که به جای
265
00:09:24,649 –> 00:09:27,079
فراخوانی فایل دانلود، اکنون
266
00:09:27,079 –> 00:09:31,579
این کار را در صف قرار می دهیم، بنابراین
267
00:09:31,579 –> 00:09:33,500
تئوری در اینجا این است که
268
00:09:33,500 –> 00:09:36,079
قرار دادن چیزی در صف در صف حافظه
269
00:09:36,079 –> 00:09:37,490
سریعتر از دانلود واقعی آن است.
270
00:09:37,490 –> 00:09:40,550
فایل را در آن تاپیک قرار دهید، بنابراین حالا اگر
271
00:09:40,550 –> 00:09:42,949
دوباره به کاری که thread های کارگر انجام می دهند نگاه کنیم، در
272
00:09:42,949 –> 00:09:45,139
اینجا چیزهای زیادی وجود ندارد، فقط
273
00:09:45,139 –> 00:09:46,670
منتظر می ماند تا چیزی
274
00:09:46,670 –> 00:09:48,410
در تمام صف شبکه بیاید و
275
00:09:48,410 –> 00:09:49,819
وقتی آن را دریافت کرد، این
276
00:09:49,819 –> 00:09:51,529
فایل دانلودی را فراخوانی می کند. همان تابعی
277
00:09:51,529 –> 00:09:53,449
که در نسخه همزمان دیدیم
278
00:09:53,449 –> 00:09:54,920
، اکنون در یک
279
00:09:54,920 –> 00:10:00,529
رشته جداگانه اجرا میشود، بسیار خوب، بنابراین ما این را با ده رشته اجرا میکنیم
280
00:10:00,529 –> 00:10:02,959
و چگونه فکر میکنیم بهتر
281
00:10:02,959 –> 00:10:05,889
از نسخه همزمان انجام میدهیم.
282
00:10:05,889 –> 00:10:09,230
خوب معلوم می شود که در واقع کمی
283
00:10:09,230 –> 00:10:11,990
بدتر است، بنابراین حدود 3.6 میلی ثانیه MLS است
284
00:10:11,990 –> 00:10:15,649
و در حدود 41.6 روز ظاهر می شود،
285
00:10:15,649 –> 00:10:18,260
آنها هنوز خیلی خوب نیستند و شاید ما
286
00:10:18,260 –> 00:10:20,029
فکر می کنیم خوب است که با ده رشته
287
00:10:20,029 –> 00:10:21,529
اتفاق می افتد که همه چیز به طور همزمان اتفاق می افتد،
288
00:10:21,529 –> 00:10:23,269
بنابراین می دانید که اجازه دهید فقط بگوییم. بیایید فقط
289
00:10:23,269 –> 00:10:25,130
تعداد رشتهها را 200 رشته افزایش دهیم، زیرا
290
00:10:25,130 –> 00:10:26,569
میدانید که کارها را سریعتر میکند،
291
00:10:26,569 –> 00:10:28,519
بنابراین معلوم میشود که در واقع
292
00:10:28,519 –> 00:10:30,980
اوضاع را بدتر میکند، حدود 4.2 میلیثانیه
293
00:10:30,980 –> 00:10:33,620
برای هر درخواست به حدود چهل و
294
00:10:33,620 –> 00:10:35,149
هشت نقطه شش روز میرسد، بنابراین همه چیز آنچنان به نظر نمیرسد.
295
00:10:35,149 –> 00:10:37,880
تا اینجا خوب است چرا این
296
00:10:37,880 –> 00:10:41,779
اتفاق خوب می افتد، ما لزوماً در اینجا i/o
297
00:10:41,779 –> 00:10:43,310
محدود نیستیم، بنابراین این نوشتن واقعاً
298
00:10:43,310 –> 00:10:44,870
خوب است زمانی که شما تعداد زیادی کار باند i/o دارید،
299
00:10:44,870 –> 00:10:47,089
اما در این مورد به دلیل
300
00:10:47,089 –> 00:10:48,589
تأخیر کم شبکه بنابراین ما به
301
00:10:48,589 –> 00:10:51,079
تأخیر میلیثانیهای تک رقمی
302
00:10:51,079 –> 00:10:53,480
و اندازه فایل کوچک نگاه میکنید،
303
00:10:53,480 –> 00:10:55,490
i/o زیادی وجود ندارد، نوشتن یک
304
00:10:55,490 –> 00:10:57,199
فایل صد بایتی با نوشتن یک
305
00:10:57,199 –> 00:10:59,569
فایل دو یا سه مگابایتی و مواردی
306
00:10:59,569 –> 00:11:01,430
مانند بحث Gil و th بسیار متفاوت است.
307
00:11:01,430 –> 00:11:04,010
سربار انتقال داده ها از رشته اصلی به
308
00:11:04,010 –> 00:11:05,630
صف کار و سپس
309
00:11:05,630 –> 00:11:07,580
از صف کار، نخ های کارگر
310
00:11:07,580 –> 00:11:09,440
آنها را اجرا می کنند و آن را به
311
00:11:09,440 –> 00:11:11,060
صف نتیجه منتقل می کنند، فقط سربار زیادی وجود دارد که
312
00:11:11,060 –> 00:11:12,980
هر یک از این صف ها دارای قفل ها
313
00:11:12,980 –> 00:11:14,450
و متغیرهای شرط هستند و بنابراین وجود دارد.
314
00:11:14,450 –> 00:11:16,910
فقط کارهای زیادی در حال انجام است و از
315
00:11:16,910 –> 00:11:19,580
آنجایی که مقدار زیادی i/o وجود ندارد، همه آن
316
00:11:19,580 –> 00:11:21,110
سربار در واقع باعث می شود کارها
317
00:11:21,110 –> 00:11:24,380
کمی کندتر شوند، اکنون چند نکته
318
00:11:24,380 –> 00:11:25,580
دیگر وجود دارد که باید در هنگام
319
00:11:25,580 –> 00:11:26,990
برخورد با رویکرد چند رشته ای در نظر
320
00:11:26,990 –> 00:11:28,670
داشته باشید. این مبتنی بر
321
00:11:28,670 –> 00:11:30,020
تجربه من در کار با
322
00:11:30,020 –> 00:11:31,790
کدها و پروژههای چند رشتهای است که کدهای واقعی
323
00:11:31,790 –> 00:11:33,110
در واقع بسیار پیچیدهتر هستند، بنابراین
324
00:11:33,110 –> 00:11:35,360
رسیدگی به مواردی مانند اگر C را کنترل
325
00:11:35,360 –> 00:11:36,890
میکنید و میخواهید خاموشی دلپذیری داشته باشید و
326
00:11:36,890 –> 00:11:39,500
میخواهید همه رشتهها در واقع عمل کنند و
327
00:11:39,500 –> 00:11:40,970
مجبور نباشید به زور کشته شوند. همه
328
00:11:40,970 –> 00:11:43,040
آنها به نوعی چالش برانگیز هستند، شما
329
00:11:43,040 –> 00:11:44,500
واقعاً نمیتوانید رشتهها را به صراحت خاموش کنید،
330
00:11:44,500 –> 00:11:46,850
درست است که باید درخواست کنید
331
00:11:46,850 –> 00:11:49,250
که آنها خاموش شوند و نوعی
332
00:11:49,250 –> 00:11:50,450
نوزاد یا متغیر را در آن تنظیم کنید.
333
00:11:50,450 –> 00:11:51,770
بهطور دورهای بررسی میکنند و امیدواریم آنها را
334
00:11:51,770 –> 00:11:53,570
ببینند و خاموش شوند و سپس
335
00:11:53,570 –> 00:11:55,460
اشکالزدایی واقعاً سخت است، همچنین
336
00:11:55,460 –> 00:11:57,050
قطعی نیست، شما معمولاً
337
00:11:57,050 –> 00:11:58,820
از PDP استفاده نمیکنید، باید از آن مانند
338
00:11:58,820 –> 00:12:00,650
اشکالزدای پایتون یا چیزی که
339
00:12:00,650 –> 00:12:03,020
میتواند چندین رشته را مدیریت کند
340
00:12:03,020 –> 00:12:05,240
استفاده کنید. هر چه بیشتر
341
00:12:05,240 –> 00:12:06,710
از کتابخانه استاندارد منحرف شوید و
342
00:12:06,710 –> 00:12:08,780
چیزهایی را در بالای آن بسازید یا از چیزهایی
343
00:12:08,780 –> 00:12:11,180
مانند QQ استفاده نکنید، احتمال اینکه
344
00:12:11,180 –> 00:12:13,130
با شرایط مسابقه روبرو شوید،
345
00:12:13,130 –> 00:12:14,180
همیشه اتفاق می افتد، چیزهایی که
346
00:12:14,180 –> 00:12:15,590
کتابخانه آنها را درک می کنند به خوبی
347
00:12:15,590 –> 00:12:17,990
آزمایش شده اند و می دانید در
348
00:12:17,990 –> 00:12:19,670
طول سالها افراد زیادی از آنها استفاده کردهاند، بنابراین
349
00:12:19,670 –> 00:12:22,580
من معمولاً سعی میکنم
350
00:12:22,580 –> 00:12:23,750
در هنگام کار با موضوعات، به موارد موجود در کتابخانه استاندارد بچسبم،
351
00:12:23,750 –> 00:12:26,540
نکته دیگری که در اینجا ممکن
352
00:12:26,540 –> 00:12:27,800
است تعجب کنید که چرا از قراردادهای آتی همزمان به خوبی استفاده نمیشود،
353
00:12:27,800 –> 00:12:30,680
در این مورد یک مجری وجود دارد.
354
00:12:30,680 –> 00:12:33,170
نقشه ای که فقط
355
00:12:33,170 –> 00:12:34,790
به شما یک عدد تکراری می دهد و نتایج را به
356
00:12:34,790 –> 00:12:36,370
شما برمی گرداند و آنها را همزمان اجرا می کند،
357
00:12:36,370 –> 00:12:38,900
در این مورد
358
00:12:38,900 –> 00:12:41,090
یک لیست 1 میلیارد عنصری ایجاد می کند. o اگر
359
00:12:41,090 –> 00:12:43,070
بخواهید یک لیست 1 میلیارد عنصری
360
00:12:43,070 –> 00:12:45,350
را در پایتون ایجاد کنید، قطعا خراب
361
00:12:45,350 –> 00:12:47,300
میشوید و حافظه شما تمام میشود، بنابراین ما
362
00:12:47,300 –> 00:12:49,100
نمیتوانیم از آن استفاده کنیم، اما هنوز راهی وجود دارد
363
00:12:49,100 –> 00:12:50,990
که بتوانیم از آیندههای همزمان استفاده کنیم و
364
00:12:50,990 –> 00:12:52,580
در آینده به آن نگاه کنیم. وقتی به فرآیندها نگاه می کنیم،
365
00:12:52,580 –> 00:12:54,740
زیرا امیدواریم که فرآیندها
366
00:12:54,740 –> 00:12:57,170
در این زمینه شانس بهتری داشته باشند، بنابراین
367
00:12:57,170 –> 00:13:01,310
اگر از جزئیات اینجا به یاد داشته باشید،
368
00:13:01,310 –> 00:13:03,260
ما 16 هسته برای استفاده داریم و چیزی که در مورد
369
00:13:03,260 –> 00:13:04,610
رشته ها وجود دارد این است که ما فقط از یک هسته استفاده می کردیم،
370
00:13:04,610 –> 00:13:06,770
بنابراین فکر کنید شاید اگر ما
371
00:13:06,770 –> 00:13:08,960
میتوان از چندین هسته استفاده کرد، چیزهایی که ممکن است
372
00:13:08,960 –> 00:13:10,450
در واقع کمی برای ما بهتر باشد،
373
00:13:10,450 –> 00:13:12,470
بنابراین کاری که در اینجا با پردازش چندگانه انجام میدهیم این است که
374
00:13:12,470 –> 00:13:14,510
به جای استفاده از رشتهها،
375
00:13:14,510 –> 00:13:16,070
میتوانیم از فرآیندها استفاده کنیم و
376
00:13:16,070 –> 00:13:18,350
سعی میکنیم از آیندههای همزمان استفاده کنیم که باید
377
00:13:18,350 –> 00:13:19,400
از آن استفاده کنیم. کمی متفاوت است،
378
00:13:19,400 –> 00:13:23,390
زیرا ما مجموعه داده های بزرگی داریم،
379
00:13:23,390 –> 00:13:24,470
بنابراین روش کار این است که
380
00:13:24,470 –> 00:13:26,420
هر بار یک تکه از
381
00:13:26,420 –> 00:13:28,280
صفحه را برداریم و سپس همه
382
00:13:28,280 –> 00:13:30,320
این فرآیندهای کارگری را به سرعت دانلود کنیم.
383
00:13:30,320 –> 00:13:32,240
ممکن است هزار فی
384
00:13:32,240 –> 00:13:34,310
هر بار که این کار تمام
385
00:13:34,310 –> 00:13:35,810
شد، به صفحه بعدی می رویم و
386
00:13:35,810 –> 00:13:37,940
سپس آن را در صف قرار می دهیم و سپس از
387
00:13:37,940 –> 00:13:39,500
آن کارگران می خواهیم هزار فایل را
388
00:13:39,500 –> 00:13:41,570
در یک زمان دانلود کنند و ما
389
00:13:41,570 –> 00:13:45,170
تا زمانی که همه موارد را بدست آوریم، ادامه می دهیم. میلیارد فایل،
390
00:13:45,170 –> 00:13:47,900
بنابراین کد برای این کمی متفاوت است،
391
00:13:47,900 –> 00:13:50,240
بنابراین ما ثابت های خود را در بالا
392
00:13:50,240 –> 00:13:52,190
داریم، نام میزبان خود را URL لیست داریم، سپس
393
00:13:52,190 –> 00:13:53,720
همه صفحات را تکرار می کنیم، بنابراین ما به
394
00:13:53,720 –> 00:13:55,190
تازگی شروع به قرار دادن چند انتزاع
395
00:13:55,190 –> 00:13:57,200
در محل می کنیم که شما شروع به انجام آن کرده اید.
396
00:13:57,200 –> 00:13:58,910
تکرار را از منطق