2015-03-17 19 views
6

Lưu ý: Tôi "đã bỏ qua" vào vùng đất của multiprocessing 2 ngày trước. Vì vậy, sự hiểu biết của tôi rất cơ bản.Nhân xử lý: Các quy trình khác với cpu.count

Tôi viết và đăng ký tải lên amazon s3 nhóm. Trong trường hợp kích thước tệp lớn hơn (100mb), Ive đã triển khai tải lên song song bằng cách sử dụng pool từ mô-đun multiprocessing. Tôi đang sử dụng máy có core i7, tôi có một số cpu_count của 8. Tôi đã bị ấn tượng rằng nếu tôi làm pool = Pool(process = 6) tôi sử dụng các lõi 6 và tệp bắt đầu tải lên ở các phần và tải lên cho 6 phần đầu tiên sẽ bắt đầu đồng thời. Để xem điều gì xảy ra khi số process lớn hơn cpu_count, tôi đã nhập 20 (ngụ ý rằng tôi muốn sử dụng 20 lõi). Trước sự ngạc nhiên của tôi thay vì nhận được một khối lỗi, chương trình bắt đầu tải lên 20 phần cùng một lúc (tôi đã sử dụng một số nhỏ hơn chunk size để đảm bảo có nhiều phần). Tôi không hiểu hành vi này. Tôi chỉ có 8 lõi, vậy làm thế nào anh ta không thể chương trình chấp nhận một đầu vào của 20? Khi tôi nói process=6, hiện nó thực sự sử dụng 6 chủ đề? Mà có thể là lời giải thích duy nhất của 20 là một đầu vào hợp lệ vì có thể có 1000 chủ đề. Có ai đó giải thích điều này cho tôi biết không.

Edit:

tôi 'mượn' mã từ here. Tôi đã thay đổi nó một chút trong đó tôi yêu cầu người dùng sử dụng cốt lõi cho lựa chọn của mình thay vì đặt parallel_processes thành 4

+1

Bạn trộn chủ đề, quy trình và lõi. Tất cả chúng đều rất khác nhau "mọi thứ". nếu bạn đặt 'processes = 6', nó sẽ chỉ sử dụng 6 ** quy trình **, có thể chạy mỗi một lõi, hoặc chúng có thể chạy trên một lõi - nó phụ thuộc vào hệ điều hành và tải hệ thống của bạn. Đối với "câu hỏi" - vui lòng cung cấp một số mã. –

Trả lời

7

Số lượng quy trình chạy đồng thời trên máy tính của bạn không bị giới hạn bởi số lượng lõi. Trong thực tế, bạn có thể có hàng trăm chương trình đang chạy ngay trên máy tính của mình - mỗi chương trình có quy trình riêng. Để làm cho nó hoạt động hệ điều hành chỉ định một trong 8 bộ vi xử lý của bạn cho mỗi tiến trình hoặc luồng chỉ tạm thời - tại một thời điểm nào đó nó có thể bị dừng lại và một quá trình khác sẽ thay thế nó. Xem What is the difference between concurrent programming and parallel programming? nếu bạn muốn tìm hiểu thêm.

Chỉnh sửa: Chỉ định nhiều quy trình hơn trong ví dụ tải lên của bạn có thể có hoặc không có ý nghĩa. Đọc từ đĩa và gửi qua mạng thường là một hoạt động chặn trong python. Một quá trình chờ đợi cho đoạn dữ liệu của nó được đọc hoặc gửi có thể được tạm dừng để quá trình khác có thể bắt đầu IO của nó. Mặt khác, với quá nhiều quá trình hoặc tập tin I/O hoặc mạng I/O sẽ trở thành một nút cổ chai và chương trình của bạn sẽ chậm lại vì chi phí bổ sung cần thiết cho quá trình chuyển đổi.

+0

khi tải lên một tệp lớn hơn '1 Gb', thời gian được giảm từ' ~ 10 phút' (khi sử dụng video tải lên nối tiếp) thành '6 phút' (khi tôi sử dụng tải lên song song) – letsc

Các vấn đề liên quan