Biến toàn cục đa xử lý Python
Trong bài đăng này, chúng tôi nói về cách sao chép dữ liệu từ quy trình gốc sang một số quy trình worker trong 9 bằng cách sử dụng các biến toàn cục. Cụ thể, chúng tôi sẽ sử dụng các thuộc tính lớp, vì tôi thấy giải pháp này hấp dẫn hơn một chút so với sử dụng các biến toàn cục được xác định ở đầu tệp Show Đối với những bạn mới tham gia loạt bài này, vấn đề chúng tôi đang cố gắng giải quyết như sau… Cho lớp sau
Và đưa ra sự song song sau đây của phương pháp 0 của chúng tôi bằng cách sử dụng 1
Chúng tôi đã học được rằng khi bạn có một phương thức thể hiện với một đối tượng lớn được liên kết với nó, việc chuyển phương thức này sang 2 sẽ dẫn đến mất hiệu suất rất lớn do lặp lại quá trình tuần tự hóa/giải tuần tự hóa đối tượng lớn giữa các quy trìnhĐây là những gì đã xảy ra với phương pháp 0 của chúng tôi ở trên. Trong bài đăng này, chúng tôi khám phá một giải pháp chỉ cho chúng tôi “cách truyền dữ liệu đến Nhóm công nhân và chỉ thực hiện một lần. ”Một giải pháp sang trọngCâu trả lời đáng tiếc cho câu hỏi của chúng tôi ở trên là, với cách triển khai hiện tại của 1, chúng tôi cần sử dụng các biến toàn cục để truyền dữ liệu tới 5 của chúng tôi. Hầu hết các tài nguyên liên mạng sẽ cho bạn thấy ví dụ tương tự nàyBằng cách thực hiện một cách tiếp cận khác, chúng ta có thể phân loại điều này một chút bằng cách sử dụng các thuộc tính lớp và một 0, với hy vọng rằng chúng ta có thể bảo tồn một cách tinh vi một số hình thức đóng gói trong mã của mìnhNhập 1
Chúng tôi kế thừa từ 2 và thực hiện ba thay đổi
Bây giờ, khi chúng tôi chạy mã song song ở trên, vì 9 và 0 là các toàn cầu được tôn vinh, nên 0 có quyền truy cập vào 3, mà không cần bất kỳ yêu cầu tuần tự hóa/giải tuần tự hóa nào, trong mỗi Quy trình 3So với 32. 5s trong lần triển khai trước đây của chúng tôi, giải pháp toàn cầu cao cấp của chúng tôi chỉ chạy trong 5s
Chúng tôi thấy trong các cuộc gọi được định hình tới 5 và 6Processdumps() calldumps() time(s)avgloads() callloads() time(s)avgParent424. 09s. 09s337. 36s. 13s1410. 34s2. 57s5. 04s. 008s2410. 31s2. 57s5. 04s. 008s3410. 31s2. 57s5. 04s. 008s4410. 36s2. 58s5. 04s. 008s5410. 23s2. 55s5. 04s. 008s6410. 19s2. 54s5. 04s. 008s7410. 04s2. 52s5. 04s. 008s849. 88s2. 47s5. 04s. 008sGiảm thiểu mối quan tâm toàn cầuTriển khai mới của chúng tôi ở trên được gói gọn trong một lớp, đó là một Lập trình hướng đối tượng đảm nhận toàn cầu. Tuy nhiên, theo ý kiến của tôi, nó rõ ràng hơn là xác định biến toàn cục trong phạm vi lồng nhau, như một số bài đăng đề xuất Các thuộc tính của lớp vẫn là các biến toàn cục, nhưng ít nhất chúng được gói gọn ở một mức độ nào đó và chỉ có sẵn dưới dạng các thuộc tính trên lớp, so với. bất cứ nơi nào. Điều này sẽ trả cổ tức khi cố gắng gỡ lỗi và duy trì cơ sở mã này, vì chỉ các mô-đun phụ thuộc vào lớp này mới cố gắng truy cập vào biến này Đề xuất phi toàn cầuBất chấp những lời chỉ trích của tôi về toàn cầu đối với trường hợp sử dụng cụ thể này, câu hỏi “liệu toàn cầu có xấu không” không có câu trả lời rõ ràng và phụ thuộc vào ngữ cảnh sử dụng. Mọi người cũng rất có ý kiến về chủ đề này. xem bài SO này Điều đó nói rằng, lời chỉ trích của tôi là người dùng Python không nên bị buộc phải sử dụng toàn cục hoặc thậm chí là từ khóa 7 để sử dụng API 1Tôi đã đề xuất một tiện ích mở rộng đã được thử nghiệm tốt, tương thích ngược của API 9 cho phép giải pháp phi toàn cầu cho vấn đề truyền dữ liệu tới và khởi tạo các quy trình của Pool worker
Các biến toàn cầu có được chia sẻ giữa các quy trình không?Các biến toàn cục chỉ có thể được chia sẻ hoặc kế thừa bởi các quy trình con được rẽ nhánh từ quy trình mẹ . Cụ thể, điều này có nghĩa là bạn phải tạo các tiến trình con bằng cách sử dụng phương thức bắt đầu 'fork'.
Python có bộ nhớ dùng chung đa xử lý không?Python cung cấp khả năng tạo và quản lý các quy trình mới thông qua tính năng đa xử lý. lớp quy trình. Trong lập trình đa xử lý, chúng ta thường cần chia sẻ dữ liệu và trạng thái chương trình giữa các quy trình. Điều này có thể đạt được bằng cách sử dụng bộ nhớ dùng chung thông qua các kiểu chữ dùng chung .
Python xử lý đa xử lý như thế nào?Đ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.
Đa xử lý có phải là Python song song không?Đa xử lý Python. Xử lý song song dựa trên quy trình trong Python
. Vì lý do này, Tính năng đa xử lý của Python thực hiện tính song song dựa trên quy trình . |