Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python

Giới thiệu về đa bằng Python

by
Difficulty:IntermediateLength:ShortLanguages:

Vietnamese (Tiếng Việt) translation by Thùy Trang (you can also view the original English article)

Các gói phần mềm đa hỗ trợ quá trình sinh sản bằng cách sử dụng một API tương tự như các mô-đun luồng. Nó cũng cung cấp cả hai địa phương và từ xa concurrency. Hướng dẫn này sẽ thảo luận đa bằng Python và làm thế nào để sử dụng đa để giao tiếp giữa các quy trình và thực hiện đồng bộ hoá giữa các quá trình, cũng như khai thác gỗ.

Giới thiệu về đa

Đa hoạt động bằng cách tạo ra một đối tượng trình và sau đó gọi điện thoại của phương pháp start() như hình dưới đây.

Trong đoạn mã ví dụ ở trên, chúng tôi lần đầu tiên nhập khẩu quá trình lớp và sau đó nhanh chóng với chức năng chúc mừng mà chúng tôi muốn chạy quá trình, đối tượng.

Sau đó chúng tôi cho biết quá trình để bắt đầu sử dụng phương pháp start(), và chúng tôi cuối cùng đã hoàn tất quá trình với phương pháp join().

Ngoài ra, bạn có thể cũng vượt qua đối số cho hàm bằng cách cung cấp các args đối số từ khóa như vậy:

Ví dụ

Hãy nhìn vào một ví dụ chi tiết hơn bao gồm tất cả các khái niệm mà chúng tôi đã thảo luận ở trên.

Trong ví dụ này, chúng tôi sẽ tạo ra một quá trình tính toán bình phương của số điện thoại và in các kết quả trên bàn điều khiển.

Bạn cũng có thể tạo nhiều hơn một quá trình cùng một lúc, như được hiển thị trong ví dụ dưới đây, trong quá trình đó p1 được các kết quả của các số bình phương, trong khi thứ hai quá trình p2 kiểm tra nếu các con số được đưa ra là ngay cả.

Thông tin liên lạc giữa các quá trình

Đa hỗ trợ hai loại kênh truyền thông giữa các quá trình:

  • Ống
  • Hàng đợi

Hàng đợi

Các đối tượng xếp hàng được sử dụng để chuyển dữ liệu giữa các quá trình. Họ có thể lưu trữ bất kỳ đối tượng Python dưa có thể, và bạn có thể sử dụng chúng như hiển thị trong ví dụ dưới đây:

Trong ví dụ trên, chúng tôi lần đầu tiên tạo ra một chức năng kiểm tra nếu một số thậm chí và sau đó đặt kết quả vào cuối hàng đợi. Sau đó, chúng tôi nhanh chóng một đối tượng xếp hàng và một đối tượng trình và bắt đầu quá trình.

Cuối cùng, chúng tôi kiểm tra nếu hàng đợi là trống rỗng, và nếu không, chúng tôi nhận được các giá trị từ mặt trước của hàng đợi và in chúng trên bàn điều khiển.

Chúng tôi đã cho thấy làm thế nào để chia sẻ dữ liệu giữa hai quá trình bằng cách sử dụng một hàng đợi, và kết quả là như hình dưới đây.

Đó cũng là quan trọng cần lưu ý rằng Python có một mô-đun danh sách chờ mà cuộc sống trong các mô-đun trình và được sử dụng để chia sẻ dữ liệu giữa các chủ đề, không giống như hàng đợi đa mà cuộc sống trong bộ nhớ dùng chung và được sử dụng để chia sẻ dữ liệu giữa các quá trình.

Ống

Đường ống trong đa chủ yếu được sử dụng cho giao tiếp giữa các quá trình. Cách sử dụng đơn giản như:

Pipe() trả về đối tượng kết nối hai đại diện cho hai đầu của đường ống. Mỗi đối tượng kết nối có phương pháp send() và recv(). Ở đây, chúng tôi tạo ra một quá trình in chuỗi chào thế giới và sau đó chia sẻ dữ liệu qua.

Kết quả

Ổ khóa

Khóa làm việc bằng cách bảo đảm rằng quá trình duy nhất được thực hiện tại một thời gian, do đó ngăn chặn các quá trình khác từ thực hiện tương tự như mã. Điều này cho phép quá trình được hoàn thành, và chỉ sau đó khóa có thể được phát hành.

Ví dụ dưới đây cho thấy việc sử dụng khá đơn giản của các phương pháp khóa.

Trong mã này, chúng tôi lần đầu tiên nhập khẩu phương pháp khóa, có được nó, thực hiện chức năng in ấn, và sau đó phát hành nó.

Đăng nhập

Module đa cũng cung cấp hỗ trợ đăng nhập, mặc dù các gói phần mềm khai thác gỗ không sử dụng ổ khóa vì vậy tin nhắn giữa các quá trình có thể kết thúc được trộn lẫn trong quá trình thực hiện.

Sử dụng ghi nhật ký là đơn giản như:

Ở đây chúng tôi lần đầu tiên nhập đăng nhập và đa mô-đun, và sau đó chúng tôi xác định các phương pháp multiprocessing.log_to_stderr(), thực hiện một cuộc gọi đến get_logger() cũng như thêm vào một trình xử lý mà sẽ gửi ra cho sys.stderr. Cuối cùng, chúng tôi thiết lập mức độ logger và thư mà chúng tôi muốn truyền đạt.

Kết luận

Hướng dẫn này đã bảo hiểm những gì là cần thiết để bắt đầu với đa bằng Python. Đa vượt qua vấn đề của GIL (toàn cầu thông dịch viên khóa) vì nó thúc đẩy việc sử dụng subprocesses thay vì chủ đề.

Có nhiều hơn nữa trong tài liệu hướng dẫn Python là không được bảo hiểm trong hướng dẫn này, vì vậy cảm thấy tự do để truy cập vào các tài liệu đa Python và sử dụng toàn bộ sức mạnh của mô-đun này.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.