Cách chạy nhiều tiến trình trong python
Tăng tốc độ tính toán là mục tiêu mà ai cũng muốn đạt được. Điều gì sẽ xảy ra nếu bạn có một tập lệnh có thể chạy nhanh hơn mười lần so với thời gian chạy hiện tại của nó? . Chúng ta sẽ nói về đa xử lý là gì, ưu điểm của nó và cách cải thiện thời gian chạy chương trình Python của bạn bằng cách sử dụng lập trình song song Show
Được rồi, vậy chúng ta hãy đi Giới thiệu về song songTrước khi đi sâu vào mã Python, chúng ta phải nói về điện toán song song, đây là một khái niệm quan trọng trong khoa học máy tính Thông thường, khi bạn chạy tập lệnh Python, mã của bạn tại một thời điểm nào đó sẽ trở thành một quy trình và quy trình này sẽ chạy trên một lõi CPU của bạn. Nhưng các máy tính hiện đại có nhiều hơn một lõi, vậy nếu bạn có thể sử dụng nhiều lõi hơn cho các tính toán của mình thì sao? Bây giờ chúng ta hãy coi đây là nguyên tắc chung, nhưng sau này, trong bài viết này, chúng ta sẽ thấy rằng điều này không đúng một cách phổ biến Không đi vào quá nhiều chi tiết, ý tưởng đằng sau tính song song là viết mã của bạn theo cách nó có thể sử dụng nhiều lõi của CPU Để làm cho mọi thứ dễ dàng hơn, hãy xem một ví dụ Điện toán song song và nối tiếpHãy tưởng tượng bạn có một vấn đề lớn cần giải quyết và bạn chỉ có một mình. Bạn cần tính căn bậc hai của tám số khác nhau. Bạn làm nghề gì? . Bạn bắt đầu với số đầu tiên và bạn tính kết quả. Sau đó, bạn tiếp tục với những người khác Điều gì sẽ xảy ra nếu bạn có ba người bạn giỏi toán sẵn sàng giúp đỡ bạn? . Điều này có nghĩa là vấn đề của bạn sẽ được giải quyết nhanh hơn Được rồi, như vậy tất cả rõ ràng? . Trong ví dụ đầu tiên, toàn bộ nhiệm vụ được bạn giải quyết tuần tự. Điều này được gọi là tính toán nối tiếp. Trong ví dụ thứ hai, vì bạn đang làm việc với tổng cộng bốn lõi, nên bạn đang sử dụng tính toán song song. Tính toán song song liên quan đến việc sử dụng các quy trình hoặc quy trình song song được phân chia giữa nhiều lõi trong bộ xử lý Mô hình lập trình song songChúng tôi đã thiết lập lập trình song song là gì, nhưng chúng tôi sử dụng nó như thế nào? . Có một số câu hỏi mà bạn nên xem xét trước khi tiếp cận song song hóa. Ví dụ: có bất kỳ tối ưu hóa nào khác có thể tăng tốc độ tính toán của chúng tôi không? Hiện tại, hãy chấp nhận rằng song song hóa là giải pháp tốt nhất cho bạn. Có ba mô hình chủ yếu trong điện toán song song
Trong bài viết này, chúng tôi sẽ minh họa mô hình đầu tiên, cũng là mô hình đơn giản nhất Đa xử lý Python. Xử lý song song dựa trên quy trình trong PythonMột cách để đạt được tính song song trong Python là sử dụng mô-đun đa xử lý. Mô-đun 1 cho phép bạn tạo nhiều quy trình, mỗi quy trình có trình thông dịch Python riêng. Vì lý do này, đa xử lý Python thực hiện song song dựa trên quy trìnhBạn có thể đã nghe nói về các thư viện khác, chẳng hạn như 3, cũng được tích hợp sẵn trong Python, nhưng có những điểm khác biệt quan trọng giữa chúng. Mô-đun 1 tạo quy trình mới, trong khi 3 tạo chủ đề mớiTrong phần tiếp theo, chúng ta sẽ xem xét những lợi ích của việc sử dụng đa xử lý Lợi ích của việc sử dụng đa xử lýDưới đây là một vài lợi ích của đa xử lý
Ưu điểm đầu tiên liên quan đến hiệu suất. Vì đa xử lý tạo ra các quy trình mới, bạn có thể sử dụng hiệu quả hơn sức mạnh tính toán của CPU bằng cách phân chia nhiệm vụ của mình cho các lõi khác. Hầu hết các bộ xử lý hiện nay đều là bộ xử lý đa lõi và nếu bạn tối ưu hóa mã của mình, bạn có thể tiết kiệm thời gian bằng cách giải các phép tính song song Ưu điểm thứ hai xem xét một giải pháp thay thế cho đa xử lý, đó là đa luồng. Tuy nhiên, các luồng không phải là các quy trình và điều này có hậu quả của nó. Nếu bạn tạo một luồng, sẽ rất nguy hiểm khi tắt nó hoặc thậm chí làm gián đoạn nó như bạn làm với một quy trình bình thường. Vì việc so sánh giữa đa xử lý và đa luồng không nằm trong phạm vi của bài viết này, tôi khuyến khích bạn đọc thêm về nó Ưu điểm thứ ba của đa xử lý là nó khá dễ triển khai, do tác vụ bạn đang cố xử lý phù hợp với lập trình song song Bắt đầu với Đa xử lý PythonCuối cùng thì chúng ta cũng đã sẵn sàng để viết một số mã Python Chúng tôi sẽ bắt đầu với một ví dụ rất cơ bản và chúng tôi sẽ sử dụng nó để minh họa các khía cạnh cốt lõi của đa xử lý Python. Trong ví dụ này, chúng ta sẽ có hai quy trình
Chúng tôi sẽ sử dụng quy trình 1 để thực hiện một chức năng nhất định. Bằng cách này, 0 có thể tiếp tục thực hiệnMột ví dụ đa xử lý Python đơn giảnĐây là mã chúng tôi sẽ sử dụng cho ví dụ này
Trong đoạn mã này, chúng ta đã định nghĩa một hàm có tên là 4. Chức năng này là một triển khai thực sự ngây thơ của thuật toán sắp xếp Bubble Sort. Nếu bạn không biết nó là gì, đừng lo lắng, vì nó không quan trọng lắm. Điều quan trọng cần biết là đó là một chức năng thực hiện một số công việcLớp quy trìnhTừ 1, chúng tôi nhập lớp 6. Lớp này đại diện cho một hoạt động sẽ được chạy trong một quy trình riêng biệt. Thật vậy, bạn có thể thấy rằng chúng tôi đã thông qua một số đối số
Khi chúng tôi đã tạo một thể hiện cho lớp Quy trình, chúng tôi chỉ cần bắt đầu quy trình. Điều này được thực hiện bằng cách viết 00. Tại thời điểm này, quá trình bắt đầuTrước khi thoát, chúng ta cần đợi tiến trình con hoàn thành việc tính toán của nó. Phương thức 01 chờ quá trình kết thúcTrong ví dụ này, chúng tôi chỉ tạo một tiến trình con. Như bạn có thể đoán, chúng ta có thể tạo nhiều tiến trình con hơn bằng cách tạo nhiều thể hiện hơn trong lớp 6lớp bi-aĐiều gì sẽ xảy ra nếu chúng ta cần tạo nhiều quy trình để xử lý các tác vụ sử dụng nhiều CPU hơn? Lớp 03 cho phép bạn tạo một nhóm quy trình worker và trong ví dụ sau, chúng ta sẽ xem cách chúng ta có thể sử dụng nó. Đây là ví dụ mới của chúng tôi
Trong đoạn mã này, chúng ta có một hàm 05 chỉ cần lấy một số nguyên và trả về căn bậc hai của nó. Dễ dàng, phải không?Sau đó, chúng tôi tạo một thể hiện của lớp 03 mà không chỉ định bất kỳ thuộc tính nào. Lớp nhóm tạo theo mặc định một quy trình cho mỗi lõi CPU. Tiếp theo, chúng tôi chạy phương thức 07 với một vài đối sốPhương thức 07 áp dụng hàm 09 cho mọi phần tử của iterable mà chúng tôi cung cấp — trong trường hợp này, là danh sách mọi số từ 10 đến 11Ưu điểm rất lớn của điều này là các tính toán trong danh sách được thực hiện song song Tận dụng tốt nhất Đa xử lý PythonTạo nhiều quy trình và thực hiện tính toán song song không nhất thiết phải hiệu quả hơn tính toán nối tiếp. Đối với các tác vụ sử dụng nhiều CPU thấp, tính toán nối tiếp nhanh hơn tính toán song song. Vì lý do này, điều quan trọng là phải hiểu khi nào bạn nên sử dụng đa xử lý — điều này phụ thuộc vào các tác vụ bạn đang thực hiện Để thuyết phục bạn về điều này, hãy xem một ví dụ đơn giản 0Đoạn mã này dựa trên ví dụ trước. Chúng ta đang giải cùng một bài toán, đó là tính căn bậc hai của số 11, nhưng theo hai cách. Cái đầu tiên liên quan đến việc sử dụng đa xử lý Python, trong khi cái thứ hai thì không. Chúng tôi đang sử dụng phương pháp 13 từ thư viện 14 để đo hiệu suất thời gianTrên máy tính xách tay của tôi, tôi nhận được kết quả này 1Như bạn có thể thấy, có hơn một giây khác biệt. Vì vậy, trong trường hợp này, đa xử lý sẽ tốt hơn Hãy thay đổi điều gì đó trong mã, chẳng hạn như giá trị của 11. Hãy hạ nó xuống 16 và xem điều gì sẽ xảy raĐây là những gì tôi nhận được bây giờ 0Chuyện gì đã xảy ra thế? . Tại sao? Chi phí hoạt động được đưa ra bằng cách phân chia các tính toán giữa các quy trình là quá nhiều so với nhiệm vụ được giải quyết. Bạn có thể thấy có bao nhiêu sự khác biệt về thời gian biểu diễn Phần kết luậnTrong bài viết này, chúng ta đã nói về việc tối ưu hóa hiệu suất của mã Python bằng cách sử dụng đa xử lý Python Đầu tiên, chúng tôi đã giới thiệu ngắn gọn điện toán song song là gì và các mô hình chính để sử dụng nó. Sau đó, chúng tôi bắt đầu nói về đa xử lý và những ưu điểm của nó. Cuối cùng, chúng tôi thấy rằng việc tính toán song song không phải lúc nào cũng là lựa chọn tốt nhất và mô-đun 1 nên được sử dụng để thực hiện song song các tác vụ liên quan đến CPU. Như mọi khi, vấn đề là xem xét vấn đề cụ thể mà bạn đang gặp phải và đánh giá ưu và nhược điểm của các giải pháp khác nhauTôi hy vọng bạn thấy việc tìm hiểu về đa xử lý Python hữu ích như tôi đã làm Chia sẻ bài viết nàyLorenzo Bonanella Tôi là một sinh viên khoa học máy tính thích đặt câu hỏi và học hỏi những điều mới. Khách du lịch, nhạc sĩ và nhà văn thỉnh thoảng. Kiểm tra tôi trên trang web của tôi Làm thế nào đa xử lý hoạt động trong Python?Đa xử lý Python Lớp quy trình là một phần trừu tượng thiết lập một quy trình Python khác, cung cấp cho nó khả năng chạy mã và cách để ứng dụng mẹ kiểm soát việc thực thi. There are two important functions that belongs to the Process class - start() and join() function.
Tôi có thể chạy bao nhiêu quy trình trong Python?Số lượng quy trình worker tối đa có thể bị giới hạn bởi hệ điều hành của bạn . Ví dụ: trên windows, bạn sẽ không thể tạo nhiều hơn 61 tiến trình con trong chương trình Python của mình.
Python có hỗ trợ đa xử lý không?Trong Python, đa xử lý có thể được triển khai bằng cách sử dụng mô-đun đa xử lý (hoặc đồng thời. tương lai. ProcessPoolExecutor ) có thể được sử dụng để tạo ra nhiều quy trình hệ điều hành .
Chúng ta có thể làm cho chương trình Python nhanh hơn bằng cách sử dụng nhiều quy trình không?Đa xử lý có thể cải thiện đáng kể tốc độ xử lý
. |