2009-12-30 34 views
9

Nếu dự án phần mềm hỗ trợ phiên bản Python mà đa xử lý đã được nhập lại, có bất kỳ lý do nào để sử dụng threading.Lock qua multiprocessing.Lock không? Có phải khóa multiprocessing cũng không phải là chủ đề an toàn không?Có bất kỳ lý do nào để sử dụng luồng hay không.Lock over multiprocessing.Lock?

Vì lý do đó, có lý do nào để sử dụng bất kỳ nguyên mẫu đồng bộ đồng bộ nào từ threading cũng có trong multiprocessing không?

Trả lời

12

Nguyên tắc đồng bộ hóa của mô-đun luồng là nhẹ hơn và nhanh hơn quá trình đa xử lý, do thiếu giao dịch với các ẩn dụ dùng chung, v.v. Nếu bạn đang sử dụng chủ đề; sử dụng ổ khóa của luồng. Quy trình nên sử dụng khóa đa xử lý.

+2

Chưa kể rằng 'đa xử lý' không phải là di động như' luồng 'là;) –

+1

Tại sao bạn phải như thế :) – jnoller

2

Tôi cho rằng nguyên tắc đồng bộ hóa đa luồng sẽ nhanh hơn vì chúng có thể dễ dàng sử dụng khu vực bộ nhớ dùng chung. Nhưng tôi cho rằng bạn sẽ phải thực hiện kiểm tra tốc độ để đảm bảo nó. Ngoài ra, bạn có thể có tác dụng phụ khá không mong muốn (và không được chỉ định trong tài liệu).

Ví dụ: khóa khôn ngoan có thể chặn tất cả các luồng của quy trình. Và nếu không, việc nhả khóa có thể không đánh thức các luồng của quá trình.

Trong ngắn hạn, nếu bạn muốn mã của bạn hoạt động chắc chắn, bạn nên sử dụng nguyên gốc đồng bộ hóa chuỗi nếu bạn đang sử dụng các chuỗi và nguyên gốc đồng bộ hóa quy trình nếu bạn đang sử dụng quy trình. Nếu không, nó có thể chỉ hoạt động trên nền tảng của bạn, hoặc thậm chí chỉ với phiên bản Python cụ thể của bạn.

0

multiprocessingthreading gói có mục tiêu hơi khác nhau, mặc dù cả hai đều có liên quan đến đồng thời. threading tọa độ chủ đề trong một quy trình, trong khi multiprocessing cung cấp giao diện giống như luồng để điều phối nhiều quy trình.

Nếu ứng dụng của bạn không sinh ra các quy trình mới cần đồng bộ hóa dữ liệu, multiprocessing có trọng lượng nặng hơn một chút và gói threading phải phù hợp hơn.

+0

Tôi hiểu sự khác biệt giữa luồng và đa xử lý. Tôi đã tò mò tại sao người ta muốn sử dụng nguyên gốc đồng bộ hóa luồng của đa xử lý. –

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