در این مطلب، ویدئو تسلط بر Python 3.x: استفاده از Concurrent.futures برای راه اندازی و مدیریت فرآیندهای کارگر | packtpub.com با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:09:57
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:08,048 –> 00:00:10,150
با سلام و خوش آمدید به بخشی که در
2
00:00:10,150 –> 00:00:11,379
آن در مورد نحوه تقسیم
3
00:00:11,379 –> 00:00:13,330
برنامه های خود به چندین فرآیند با
4
00:00:13,330 –> 00:00:15,070
قابلیت اجرا بر روی چندین هسته CPU
5
00:00:15,070 –> 00:00:18,189
به طور همزمان
6
00:00:18,189 –> 00:00:19,689
صحبت خواهیم کرد.
7
00:00:19,689 –> 00:00:22,090
8
00:00:22,090 –> 00:00:24,129
ایده خوبی باشد سپس
9
00:00:24,129 –> 00:00:25,300
به سه بسته مختلف کتابخانه استاندارد پایتون نگاه می کنیم
10
00:00:25,300 –> 00:00:27,219
که به ما امکان می
11
00:00:27,219 –> 00:00:29,680
دهد چندین فرآیند ایجاد کنیم. ابتدا به
12
00:00:29,680 –> 00:00:32,049
آینده های همزمان نگاه خواهیم کرد یک رابط سطح بالا
13
00:00:32,049 –> 00:00:33,820
که باعث می شود ایجاد و
14
00:00:33,820 –> 00:00:35,440
استفاده از فرآیندهای کارگری ساده
15
00:00:35,440 –> 00:00:37,600
آینده همزمان ساخته شود. در بالا با
16
00:00:37,600 –> 00:00:39,760
یک کتابخانه چند پردازشی که یک
17
00:00:39,760 –> 00:00:41,650
رابط سطح متوسط است که به
18
00:00:41,650 –> 00:00:43,780
اندازه آتیهای همزمان ساده نیست، اما به
19
00:00:43,780 –> 00:00:45,430
ا انعطاف بیشتری در نح
20
00:00:45,430 –> 00:00:47,890
ه تعامل فرآیندهایمان می
21
00:00:47,890 –> 00:00:49,930
22
00:00:49,930 –> 00:00:52,000
دهد. رابط سطحی
23
00:00:52,000 –> 00:00:53,559
که از نظر فنی انعطاف پذیری بیشتری را برای ما فراهم می کند،
24
00:00:53,559 –> 00:00:56,020
اما
25
00:00:56,020 –> 00:00:57,100
نیاز به مقابله با انواع
26
00:00:57,100 –> 00:00:58,600
چیزهای بی اهمیت قبل از دریافت چیزی که
27
00:00:58,600 –> 00:01:00,940
در برخی فرآیندها حائز اهمیت است بر اساس عملکردهای خاص
28
00:01:00,940 –> 00:01:02,469
سیستم عامل حتی پایین تر ساخته شده است،
29
00:01:02,469 –> 00:01:04,569
اما ما
30
00:01:04,569 –> 00:01:06,420
قصد نداریم وارد این رهگیری
31
00:01:06,420 –> 00:01:08,469
شویم، در نهایت به تکنیکی نگاه خواهیم کرد که با پرداختن به
32
00:01:08,469 –> 00:01:09,790
فرآیندهای میانی، کمی عملکرد بیشتر از
33
00:01:09,790 –> 00:01:12,039
برنامه های فرآیندی متعدد را کاهش
34
00:01:12,039 –> 00:01:12,959
دهیم. گلوگاه ارتباطی
35
00:01:12,959 –> 00:01:14,229
36
00:01:14,229 –> 00:01:16,030
فقط یک یادداشت در زمانی که دارم
37
00:01:16,030 –> 00:01:17,950
این را ضبط میکنم، پیشنهادی برای اضافه کردن
38
00:01:17,950 –> 00:01:20,139
مکانیسم جدیدی به پایتون وجود دارد که به ما
39
00:01:20,139 –> 00:01:21,759
امکان میدهد مفسرهای مستقل پایتون را
40
00:01:21,759 –> 00:01:23,889
در چندین رشته سیستمعامل اجرا کنیم و
41
00:01:23,889 –> 00:01:25,299
این به شکل دیگری از همزمانی در پایتون امکان میدهد که از
42
00:01:25,299 –> 00:01:27,579
لحاظ معنایی
43
00:01:27,579 –> 00:01:29,770
شبیه به چندگانه باشد. فرآیندها اما به
44
00:01:29,770 –> 00:01:32,049
طور قابل توجهی سریعتر بود زمان ارتباط
45
00:01:32,049 –> 00:01:33,429
به ما می گوید که این ویژگی پذیرفته شده است یا
46
00:01:33,429 –> 00:01:35,289
خیر، اما این چیزی است که باید مراقب
47
00:01:35,289 –> 00:01:38,679
این پیشنهاد بود که به عنوان PEP 5 5 4 نامیده می شود
48
00:01:38,679 –> 00:01:40,509
و در حال حاضر در Python 3.8 هدف قرار گرفته است،
49
00:01:40,509 –> 00:01:42,140
50
00:01:42,140 –> 00:01:43,790
اجازه دهید ویدیو را با استفاده از
51
00:01:43,790 –> 00:01:45,620
ویژگی های همزمان مهره شروع کنیم. راه اندازی و مدیریت
52
00:01:45,620 –> 00:01:49,190
فرآیندهای کارگری در این ویدیو می
53
00:01:49,190 –> 00:01:50,120
خواهیم در مورد نقاط قوت و ضعف صحبت کنیم
54
00:01:50,120 –> 00:01:51,770
ماهیت آینده های مقایسه ای هستند
55
00:01:51,770 –> 00:01:54,140
و چه زمانی باید آن را انتخاب کنیم، سپس خواهیم دید که
56
00:01:54,140 –> 00:01:55,670
چگونه از آن برای ایجاد و مدیریت یک دسته از
57
00:01:55,670 –> 00:01:58,369
فرآیندهای کارگری استفاده
58
00:01:58,369 –> 00:02:00,259
کنیم، زمانی که می خواهیم
59
00:02:00,259 –> 00:02:02,300
از قدرت محاسباتی تمام CPU
60
00:02:02,300 –> 00:02:04,130
های کامپیوتر استفاده کامل کنیم، از چندین فرآیند استفاده می کنیم. برنامه ما در حال اجرا است
61
00:02:04,130 –> 00:02:07,009
به عبارت دیگر زمانی که برنامه ما
62
00:02:07,009 –> 00:02:09,619
محدود به CPU است اگر برنامه ما بیشتر وقت
63
00:02:09,619 –> 00:02:11,959
خود را صرف انتظار برای ورودی شبکه ورودی کاربر
64
00:02:11,959 –> 00:02:14,720
و غیره کند، به عبارت دیگر اگر برنامه ما
65
00:02:14,720 –> 00:02:17,330
به صورت i/o محدود باشد چندین فرآیند
66
00:02:17,330 –> 00:02:19,730
به ما هیچ سودی نمی دهد. بنابراین، اگر
67
00:02:19,730 –> 00:02:21,830
از چندین فرآیند استفاده می کنیم، به این دلیل است که
68
00:02:21,830 –> 00:02:23,660
ما یک کار محاسباتی فشرده برای
69
00:02:23,660 –> 00:02:25,610
انجام دادن کار داریم که رایج ترین روش برای ساختار یک
70
00:02:25,610 –> 00:02:27,500
برنامه در این مورد، داشتن یک
71
00:02:27,500 –> 00:02:29,120
فرآیند کنترل کننده و تعدادی از
72
00:02:29,120 –> 00:02:31,340
پردازش های کارگر است، فرآیند کنترل کننده
73
00:02:31,340 –> 00:02:32,989
واحدهای کاری را به کارگرانی
74
00:02:32,989 –> 00:02:34,730
که کار را انجام می دهند و سپس
75
00:02:34,730 –> 00:02:36,769
نتایج کار را قبل از
76
00:02:36,769 –> 00:02:38,390
جمع آوری یک واحد کاری جدید و تکرار
77
00:02:38,390 –> 00:02:40,760
یک واحد کاری به کنترل کننده برمی گردانند، فقط بخشی از
78
00:02:40,760 –> 00:02:42,590
کار کلی ما را نشان می دهد که می توان آن را قطع کرد
79
00:02:42,590 –> 00:02:44,269
و انجام داد. وظیفه کنترلر به طور مستقل این
80
00:02:44,269 –> 00:02:45,950
است که تصمیم بگیرد که واحدهای کاری چه چیزی
81
00:02:45,950 –> 00:02:47,900
را به کارگران اختصاص دهند و
82
00:02:47,900 –> 00:02:49,910
سپس نتایج کار را
83
00:02:49,910 –> 00:02:52,070
در نتیجه نهایی محاسبات خود ترکیب کنیم،
84
00:02:52,070 –> 00:02:53,600
این دقیقاً همان پارادایمی است که
85
00:02:53,600 –> 00:02:56,090
آینده نقطه همزمان از آن پشتیبانی می کند، بنابراین اگر کاری
86
00:02:56,090 –> 00:02:57,739
برای انجام دادن داشته باشیم می توانیم انجام دهیم. به این
87
00:02:57,739 –> 00:02:59,540
ترتیب ساختار ویژگیهای همزمان
88
00:02:59,540 –> 00:03:02,269
سادهترین راه برای انجام کارآمد خواهد بود. در اینجا
89
00:03:02,269 –> 00:03:03,590
برنامهای داریم که
90
00:03:03,590 –> 00:03:05,060
فاکتوریلهای
91
00:03:05,060 –> 00:03:07,040
هزار عدد صحیح غیر منفی اول
92
00:03:07,040 –> 00:03:08,810
93
00:03:08,810 –> 00:03:10,910
را محاسبه میکند. فاکتوریل های آن
94
00:03:10,910 –> 00:03:12,980
اعداد نتایج کار هستند
95
00:03:12,980 –> 00:03:14,480
خروجی محاسبه فاکتوریل به سرعت رشد می کند
96
00:03:14,480 –> 00:03:16,160
و این یک
97
00:03:16,160 –> 00:03:17,989
مثال نسبتاً معقول از یک عملیات محدود به CPU است،
98
00:03:17,989 –> 00:03:20,490
99
00:03:20,490 –> 00:03:22,320
ما می خواهیم از مجری های مخزن پردازش
100
00:03:22,320 –> 00:03:24,270
استفاده کنیم تا برنامه ما از
101
00:03:24,270 –> 00:03:25,620
چندین فرآیند برای اجرای
102
00:03:25,620 –> 00:03:27,540
محاسبات خود استفاده کند. بخشی از
103
00:03:27,540 –> 00:03:29,940
بسته آتی همزمان،
104
00:03:29,940 –> 00:03:32,310
وظیفه مجریان استخر فرآیند جمع کردن
105
00:03:32,310 –> 00:03:33,450
پیچیدگیهای اجرا و
106
00:03:33,450 –> 00:03:34,980
برقراری ارتباط با چند است. فرآیندهای ple
107
00:03:34,980 –> 00:03:35,910
در داخل یک رابط بسیار ساده
108
00:03:35,910 –> 00:03:39,450
ما این تابع کارگر نامیده می شود
109
00:03:39,450 –> 00:03:41,010
زیرا این نقشی است که در برنامه ما پر می کند.
110
00:03:41,010 –> 00:03:43,170
111
00:03:43,170 –> 00:03:45,150
112
00:03:45,150 –> 00:03:47,360
113
00:03:47,360 –> 00:03:48,770
114
00:03:48,770 –> 00:03:50,930
115
00:03:50,930 –> 00:03:53,860
در واقع
116
00:03:54,060 –> 00:03:56,670
عملکرد کنترلر در حال اجرای
117
00:03:56,670 –> 00:03:58,380
فرآیند کنترل کننده ما است که
118
00:03:58,380 –> 00:04:00,930
اتفاقاً فرآیند اصلی ما نیز هست اولین کاری
119
00:04:00,930 –> 00:04:02,760
که تابع کنترلر انجام می دهد این است
120
00:04:02,760 –> 00:04:04,410
که نمونه ای از فرآیند استخر
121
00:04:04,410 –> 00:04:07,470
ایجاد می کند که از آن شی برای
122
00:04:07,470 –> 00:04:08,910
کنترل و برقراری ارتباط با کارگران ما استفاده می
123
00:04:08,910 –> 00:04:11,190
کند که امکان فروش آن وجود دارد. مجموعه فرآیندی
124
00:04:11,190 –> 00:04:13,170
که میخواهیم از تعداد پردازشهای کارگر
125
00:04:13,170 –> 00:04:14,640
به عنوان پارامتر سازنده استفاده کنیم،
126
00:04:14,640 –> 00:04:17,548
اما اگر آن پارامتر را حذف کنیم،
127
00:04:17,548 –> 00:04:19,260
فرآیند به طور خودکار از
128
00:04:19,260 –> 00:04:21,480
تعداد پردازندههای منطقی موجود استفاده میکند،
129
00:04:21,480 –> 00:04:23,520
این تعداد پردازشهای کارگری است که
130
00:04:23,520 –> 00:04:25,020
تقریباً همیشه بهترین انتخاب است.
131
00:04:25,020 –> 00:04:26,730
معمولاً فقط به مجموعه فرآیند اجازه
132
00:04:26,730 –> 00:04:30,720
133
00:04:30,720 –> 00:04:32,250
میدهیم تا در مورد روش احتمالی نقشه مجری تصمیم بگیرد y ساده ترین مکانیسمی
134
00:04:32,250 –> 00:04:34,500
که برای کشاورزی در وظایف دو فرآیند کارگری وجود دارد،
135
00:04:34,500 –> 00:04:36,900
یک تابع برای استفاده
136
00:04:36,900 –> 00:04:39,270
و صفر یا چند لیست یا سایر
137
00:04:39,270 –> 00:04:41,400
تکرارپذیرهای متناهی از داده های ورودی برای
138
00:04:41,400 –> 00:04:43,830
تابع ارسال می کنیم و یک تکرار کننده
139
00:04:43,830 –> 00:04:46,110
از نتایج هر یک از داده های ورودی را برمی گردانیم. بولت های ردیف
140
00:04:46,110 –> 00:04:48,240
برای
141
00:04:48,240 –> 00:04:50,400
هر بار اجرای تابع یک مقدار پارامتر
142
00:04:50,400 –> 00:04:52,680
ارائه می دهند، بنابراین اگر سه پارامتر را در پیچ های خود ارائه دهیم،
143
00:04:52,680 –> 00:04:54,510
اولین عنصر هر تکرار شونده یا
144
00:04:54,510 –> 00:04:55,950
پارامترهای اولین تن
145
00:04:55,950 –> 00:04:58,080
تابع اجرا شود، عناصر دوم هر ضربه
146
00:04:58,080 –> 00:05:00,270
ریپل پارامترهای مربوط به بار دوم
147
00:05:00,270 –> 00:05:02,250
که تابع اجرا می شود و به همین ترتیب
148
00:0