2013-03-30 29 views
10

Gần đây tôi đang nghiên cứu các công cụ lập trình song song trong Python. Và đây là hai sự khác biệt lớn giữa os.pipe và multiprocessing.Pipe (mặc dù nhân dịp chúng được sử dụng)Python os.pipe vs multiprocessing.Pipe

  1. os.pipe là một chiều, multiprocessing.Pipe là hai chiều.
  2. Khi đặt mọi thứ vào ống/nhận mọi thứ từ đường ống, os.pipe sử dụng mã hóa/giải mã, trong khi multiprocessing.Pipe sử dụng dưa/unpickle

Tôi muốn biết nếu hiểu biết của tôi là đúng, và có sự khác biệt nào khác không? Cảm ơn bạn.

Trả lời

6

Tôi tin rằng mọi thứ bạn đã nói đều chính xác.

Trên Linux, os.pipe chỉ là giao diện Python để truy cập các đường ống POSIX truyền thống. Trên Windows, nó được triển khai bằng cách sử dụng CreatePipe. Khi bạn gọi nó, bạn sẽ nhận được hai bộ mô tả tập tin thông thường. Đó là một chiều, và bạn chỉ cần viết byte cho nó trên một đầu mà có được đệm bởi hạt nhân cho đến khi ai đó đọc từ phía bên kia. Nó khá thấp, ít nhất là bằng các tiêu chuẩn Python.

multiprocessing.Pipe đối tượng là giao diện cấp cao hơn nhiều, được triển khai bằng các đối tượng multiprocessing.Connection. Trên Linux, chúng thực sự được xây dựng trên đầu các ổ cắm POSIX, chứ không phải là các ống POSIX. Trên Windows, chúng được xây dựng bằng cách sử dụng API CreateNamedPipe. Như bạn đã lưu ý, các đối tượng multiprocessing.Connection có thể gửi/nhận bất kỳ đối tượng có thể chọn nào và sẽ tự động xử lý quy trình tẩy/tháo ghim, thay vì chỉ xử lý các byte. Họ có khả năng là cả hai chiều và một chiều.