Hướng dẫn is python good for concurrency? - python có tốt cho đồng thời không?

6

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Chỉ cần xem xét bắt đầu học Python nhưng tôi có một mối quan tâm trước khi tôi đầu tư nhiều thời gian hơn. Hãy để tôi diễn đạt điều này như một tuyên bố theo sau là mối quan tâm để người khác bình luận về vì có lẽ các giả định trong tuyên bố là không hợp lệ:

Tôi đã đọc về Gil và sự đồng thuận dường như là nếu bạn yêu cầu các giải pháp đồng thời trong Python đặt cược tốt nhất của bạn là đưa ra một quy trình mới để tránh Gil.

Mối quan tâm của tôi là nếu tôi gặp vấn đề, tôi muốn chia thành các mảnh N *2 trên các bộ xử lý n (ví dụ tôi có một máy chủ chạy *Nix O/s với 8 lõi) Tôi sẽ phải chịu hình phạt chuyển đổi ngữ cảnh giữa các quá trình thay vì giữa các luồng, tốn kém hơn, điều này sẽ hạn chế hiệu suất.

Tôi hỏi điều này bởi vì các ngôn ngữ khác ở ngoài đó tuyên bố sẽ vượt trội trong một kịch bản như vậy và tôi tự hỏi là Python thích hợp cho đấu trường này.

hỏi ngày 27 tháng 1 năm 2010 lúc 20:49Jan 27, 2010 at 20:49

Hướng dẫn is python good for concurrency? - python có tốt cho đồng thời không?

Ben Fitzgeraldben FitzgeraldBen Fitzgerald

7731 Huy hiệu vàng6 Huy hiệu bạc19 Huy hiệu đồng1 gold badge6 silver badges19 bronze badges

4

multiprocessing có thể đi vòng quanh Gil, nhưng nó giới thiệu các vấn đề của riêng mình như giao tiếp giữa các quy trình.

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 20:54Jan 27, 2010 at 20:54

Hướng dẫn is python good for concurrency? - python có tốt cho đồng thời không?

0

Python không tốt lắm cho lập trình đồng thời ràng buộc CPU. Gil sẽ (trong nhiều trường hợp) làm cho chương trình của bạn chạy như thể nó đang chạy trên một lõi duy nhất - hoặc thậm chí tệ hơn. Ngay cả Unladen Swallow sẽ (có lẽ) không giải quyết được vấn đề đó (trích dẫn từ kế hoạch dự án của họ: "Chúng tôi không còn lạc quan về cơ hội loại bỏ hoàn toàn Gil").

Như bạn đã nêu, các ngôn ngữ khác tuyên bố là tốt hơn trong lập trình đồng thời. Haskell, ví dụ, có chức năng tích hợp cho các ứng dụng đồng thời lập trình. Bạn cũng có thể thử C ++ với OpenMP, điều mà tôi nghĩ làm cho sự song song rất đơn giản.

Nếu ứng dụng của bạn bị ràng buộc I/O, Python có thể là một giải pháp nghiêm trọng vì GIL thường được phát hành trong khi thực hiện các cuộc gọi chặn.

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 21:18Jan 27, 2010 at 21:18

3

Theo kinh nghiệm hạn chế của tôi, "chi phí chuyển đổi ngữ cảnh" được đánh giá cao như một giới hạn hiệu suất.

Băng thông I/O và bộ nhớ là các yếu tố giới hạn phổ biến nhất. I/O của Python có thể so sánh với nhiều ngôn ngữ khác, vì nó chỉ đơn giản là sử dụng các thư viện C tiêu chuẩn khá trực tiếp.

Vấn đề thực tế của bạn có thể không phải là điển hình. Tuy nhiên, nhiều vấn đề sẽ giải quyết thực sự tốt trong chế độ đa xử lý vì chúng thực sự bị ràng buộc I/O. Thường thì đó là hệ thống tập tin, đọc trang web hoặc hoạt động cơ sở dữ liệu hạn chế hiệu suất từ ​​lâu trước khi chuyển đổi ngữ cảnh.

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 20:52Jan 27, 2010 at 20:52

S.LottS.LottS.Lott

377K78 Huy hiệu vàng503 Huy hiệu bạc773 Huy hiệu Đồng78 gold badges503 silver badges773 bronze badges

1

Một phản ứng một từ rất glib: Golang.

Đã trả lời ngày 3 tháng 9 năm 2013 lúc 15:22Sep 3, 2013 at 15:22

William Paynewilliam PayneWilliam Payne

2.8953 huy hiệu vàng22 Huy hiệu bạc25 Huy hiệu đồng3 gold badges22 silver badges25 bronze badges

Nếu bạn đang xem xét việc học Python để giải quyết vấn đề này, tôi có thể khuyên bạn nên xem Erlang thay thế. Nó có sự hỗ trợ tuyệt vời cho các quy trình rất nhẹ và các nguyên thủy tích hợp cho IPC.

Tất nhiên, không ngăn cản bạn học Python, chỉ đề nghị có thể có một công cụ tốt hơn cho nhiệm vụ cụ thể này.

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 21:07Jan 27, 2010 at 21:07

TmntmnTMN

3.04220 Huy hiệu bạc23 Huy hiệu đồng20 silver badges23 bronze badges

Ngoài ra, nếu bạn đang xem xét chia sẻ đối tượng giữa các quá trình Python, tôi khuyên bạn nên xem câu trả lời của Alex trong câu hỏi này

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 21:27Jan 27, 2010 at 21:27

TigrisctigriscTigrisC

1.3009 huy hiệu bạc11 huy hiệu đồng9 silver badges11 bronze badges

Viết mã cho nhiều quy trình không phải là một nhiệm vụ dễ dàng.

Nhưng nếu bạn bắt đầu nghĩ theo cách này trước tiên, cuối cùng, sẽ dễ dàng hơn để mở rộng nếu một máy không đủ ... các luồng không thể được sử dụng trên các máy ...

Đã trả lời ngày 2 tháng 12 năm 2011 lúc 7:49Dec 2, 2011 at 7:49

Python có tốt cho đa luồng không?

Python không hỗ trợ đa luồng vì Python trên trình thông dịch Cpython không hỗ trợ thực thi đa lõi thực sự thông qua đa luồng.Tuy nhiên, Python có một thư viện luồng.Gil không ngăn chặn luồng. because Python on the Cpython interpreter does not support true multi-core execution via multithreading. However, Python does have a threading library. The GIL does not prevent threading.

Làm thế nào để Python xử lý đồng thời?

Nhiều lần các quy trình đồng thời cần truy cập cùng một dữ liệu cùng một lúc.Một giải pháp khác, hơn là sử dụng các khóa rõ ràng, là sử dụng cấu trúc dữ liệu hỗ trợ truy cập đồng thời.Ví dụ: chúng ta có thể sử dụng mô-đun hàng đợi, cung cấp hàng đợi an toàn chủ đề.Chúng tôi cũng có thể sử dụng đa xử lý.use a data structure that supports concurrent access. For example, we can use the queue module, which provides thread-safe queues. We can also use multiprocessing.

Ngôn ngữ nào là tốt nhất cho lập trình đồng thời?

Java, C# và C ++ là ba ngôn ngữ nổi tiếng với sự hỗ trợ tốt cho sự đồng thời. are three well-known languages with good support for concurrency.

Có phải đa luồng tồn tại trong Python?

Python có các thư viện tích hợp cho các cấu trúc lập trình đồng thời phổ biến nhất-đa xử lý và đa luồng. — multiprocessing and multithreading.