Hướng dẫn python multiprocessing process id - id quy trình đa xử lý python
Trong bài này chúng ta sẽ tìm hiểu xử lý đa tiến trình trong Python. Đa xử lý hay còn gọi là multiprocessing, thường được dùng để xử lý nhiều tiến trình chạy song song.multiprocessing, thường được dùng để xử lý nhiều tiến trình chạy song song. Show Nội dung chính
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức. Đa xử lý được tích hợp trong module multiprocessing, trong đó có lớp process, vì vậy bạn phải import thư viện này vào trước khi sử dụng nhé.multiprocessing, trong đó có lớp process, vì vậy bạn phải import thư viện này vào trước khi sử dụng nhé. 1. Multiprocessing là gì?2. Multiprocessing trong Python là gì? 3. Multiprocessing có không gian bộ nhớ riêngtại sao ta phải sư dụng multiprocessing? Hãy đặt một ví dụ về máy tính có một processor nhé. 4. Shared memory trong Processing Python Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Đa xử lý được tích hợp trong module multiprocessing, trong đó có lớp process, vì vậy bạn phải import thư viện này vào trước khi sử dụng nhé. Multiprocessing là khả năng của một hệ thống hỗ trợ nhiều bộ vi xử lý processor cùng một lúc. Các ưng dụng trong hệ thống đa xử lý được chia thành nhiều quy trình nhỏ và chạy độc lập, và hệ điều hành sẽ phân bổ các luồng này cho bộ vi xử lý để cải thiện hiệu suất của hệ thống. 2. Multiprocessing trong Python là gì?3. Multiprocessing có không gian bộ nhớ riêng 4. Shared memory trong Processing Pythonmultiprocessing sẽ giúp bạn biết được điều đó, bằng cách sử dụng đoạn mã đơn giản dưới đây. import multiprocessing print("Số lượng cpu : ", multiprocessing.cpu_count()) Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Đa xử lý được tích hợp trong module multiprocessing, trong đó có lớp process, vì vậy bạn phải import thư viện này vào trước khi sử dụng nhé. Multiprocessing là khả năng của một hệ thống hỗ trợ nhiều bộ vi xử lý processor cùng một lúc. Các ưng dụng trong hệ thống đa xử lý được chia thành nhiều quy trình nhỏ và chạy độc lập, và hệ điều hành sẽ phân bổ các luồng này cho bộ vi xử lý để cải thiện hiệu suất của hệ thống.: Bây giờ hãy xem một đoạn code đơn giản dưới đây. # importing module multiprocessing import multiprocessing def print_cube(num): """ Hàm in thể tích của khối lập phương """ print("Giá trị lập phương: {}".format(num * num * num)) def print_square(num): """ Hàm in diện tích hình vuông """ print("Diện tích hình vuông: {}".format(num * num)) # Chương trình chính if __name__ == "__main__": # Tạo hai tiến trình process p1 = multiprocessing.Process(target=print_square, args=(10, )) p2 = multiprocessing.Process(target=print_cube, args=(10, )) # Bắt đầu process 1 p1.start() # Bắt đầu process 2 p2.start() # Chờ tới khi process 1 hoàn thành p1.join() # Chờ tới khi process 2 hoàn thành p2.join() # Cả hai processes hoàn thành print("Done!") Câu hỏi đặt ra là tại sao ta phải sư dụng multiprocessing? Hãy đặt một ví dụ về máy tính có một processor nhé. Diện tích hình vuông: 100 Giá trị lập phương: 1000 Done! Bài viết này được đăng tại [free tuts .net]
Kết quả: Giải thích một chút về chương trình:: Kiểm tra process ID và trạng thái của process. # importing multiprocessing và os module import multiprocessing import os def worker1(): # In ra process id của worker1 print("ID của tiến trình worker1: {}".format(os.getpid())) def worker2(): # In ra process id của worker2 print("ID của tiến trình worker2: {}".format(os.getpid())) # Chương trình chính if __name__ == "__main__": # In ra process id của chương trình chính print("ID của chương trình chính: {}".format(os.getpid())) # Tạo processes p1 = multiprocessing.Process(target=worker1) p2 = multiprocessing.Process(target=worker2) # Chạy processes p1.start() p2.start() # Lấy process IDs print("ID của process p1: {}".format(p1.pid)) print("ID của process p2: {}".format(p2.pid)) # Chờ cho tới khi 2 process p1 và p2 hoàn thành p1.join() p2.join() # In thông báo cả hai đã hoàn thành print("Cả hai tiến trình đã hoàn thành!") # Kiểm tra trạng thái của hai process print("Process p1 có đang chạy? {}".format(p1.is_alive())) print("Process p2 có đang chạy? {}".format(p2.is_alive())) Câu hỏi đặt ra là tại sao ta phải sư dụng multiprocessing? Hãy đặt một ví dụ về máy tính có một processor nhé.: ID của chương trình chính: 2928 ID của process p1: 6160 ID của process p2: 9208 ID của tiến trình worker1: 6160 ID của tiến trình worker2: 9208 Cả hai tiến trình đã hoàn thành! Process p1 có đang chạy? False Process p2 có đang chạy? False Bài viết này được đăng tại [free tuts .net]
Multiprocessing trong Python là một module hỗ trợ lập trình viên có thể phân chia công việc theo nhiều quy trình. Bằng cách thông qua những phương thức (API) mà module cung cấp sẵn, chúng ta có thể quản lý được các task một cách dễ dàng. Để hiểu rõ về xử lý tiến trình song song thì bạn phải biết có bao nhiêu core trong máy tính đang sử dụng, và module multiprocessing sẽ giúp bạn biết được điều đó, bằng cách sử dụng đoạn mã đơn giản dưới đây. 3. Multiprocessing có không gian bộ nhớ riêng4. Shared memory trong Processing Pythonchạy độc lập và có không gian bộ nhớ riêng. Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.global ở hai tiến trình khác nhau thì việc thay giá trị cho biến đó ở hai tiến trình là không ảnh hưởng đến nhau. Đa xử lý được tích hợp trong module multiprocessing, trong đó có lớp process, vì vậy bạn phải import thư viện này vào trước khi sử dụng nhé. import multiprocessing # Biến global là một mảng rỗng result = [] def process1(): """ Hàm chạy tiến trình 1""" global result result.append(100) print("Result trong process1:", result) if __name__ == "__main__": # Tạo process1 p1 = multiprocessing.Process(target=process1, args=()) # Bắt đầu p1.start() # Chờ cho tới khi p1 hoàn thành p1.join() # Kiểm tra xem result có thay đổi không print("Result trong main: ".format(result)) Câu hỏi đặt ra là tại sao ta phải sư dụng multiprocessing? Hãy đặt một ví dụ về máy tính có một processor nhé. Result trong process1: [100] Result trong main: Bài viết này được đăng tại [free tuts .net]
Để hiểu rõ về xử lý tiến trình song song thì bạn phải biết có bao nhiêu core trong máy tính đang sử dụng, và module multiprocessing sẽ giúp bạn biết được điều đó, bằng cách sử dụng đoạn mã đơn giản dưới đây. Kết quả trên máy tính của mình là:share dữ liệu giữa chúng thì làm thế nào? Đấy chỉ là mới tham khảo số lượng CPU. Nếu bạn muốn tìm hiểu sâu hơn thì hãy tiếp tục với các ví dụ phía dưới nhé.
import multiprocessing def process1(arrayObj, valueObj): valueObj.value = 1000 arrayObj[0] = 10 arrayObj[1] = 20 arrayObj[2] = 30 arrayObj[3] = 40 print("______________________________") print("Giá trị BÊN TRONG tiến trình") print('Array: ', arrayObj[:]) print('Value: ', valueObj.value) if __name__ == "__main__": # Tạo một mảng kiểu int gồm 4 phần tử arrayObj = multiprocessing.Array('i', 4) # Tạo một giá trị kiểu int valueObj = multiprocessing.Value('i') print("Giá trị TRƯỚC khi gọi tiến trình") print('Array: ', arrayObj[:]) print('Value: ', valueObj.value) # Tạo và chạy tiến trình p1 = multiprocessing.Process(target=process1, args=(arrayObj, valueObj)) p1.start() p1.join() print("______________________________") print("Giá trị SAU khi gọi tiến trình") print('Array: ', arrayObj[:]) print('Value: ', valueObj.value) Kết quả: Giá trị TRƯỚC khi gọi tiến trình Array: [0, 0, 0, 0] Value: 0 ______________________________ Giá trị BÊN TRONG tiến trình Array: [10, 20, 30, 40] Value: 1000 ______________________________ Giá trị SAU khi gọi tiến trình Array: [10, 20, 30, 40] Value: 1000 Bên trong tiến trình process1 mình đã thay đổi giá trị cho các đối tượng Array và Value, và nó được lưu lại cho mọi tiến trình chạy sau nó.process1 mình đã thay đổi giá trị cho các đối tượng Array và Value, và nó được lưu lại cho mọi tiến trình chạy sau nó. Lời kết: Trên là tổng hợp một số kiến thức quan trọng về xử lý đa tiến trình multiprocessing trong Python. Đây là một kiến thức nâng cao khá hay, và mình nghĩ các bạn nên dành chút thời gian để thực hành theo sẽ giúp ích rất nhiều trong việc hiểu về đa tiến trình.: Trên là tổng hợp một số kiến thức quan trọng về xử lý đa tiến trình multiprocessing trong Python. Đây là một kiến thức nâng cao khá hay, và mình nghĩ các bạn nên dành chút thời gian để thực hành theo sẽ giúp ích rất nhiều trong việc hiểu về đa tiến trình. |