Hướng dẫn is python 3 print thread safe? - Python 3 luồng in có an toàn không?

Đối với Python 3.7: Hàm print() là một bản tích hợp, theo mặc định sẽ gửi đầu ra đến sys.stdout, tài liệu nói, trong số những điều khác:

Khi các luồng tương tác, stdout và stderr được đệm. Nếu không, chúng được chặn như các tệp văn bản thông thường. Bạn có thể ghi đè giá trị này với tùy chọn dòng lệnh -U.

Vì vậy, nó thực sự là sự kết hợp của chế độ tương tác và sys.stderr chịu trách nhiệm cho hành vi của chức năng print như được thể hiện trong ví dụ.

Và chúng ta có thể đến gần hơn với sự thật nếu hàm worker trong chương trình ví dụ của bạn được thay đổi thành

def worker(letter):
    print(letter*25, letter*25, sep='\n')

Sau đó, chúng tôi nhận được các đầu ra tương tự như dưới đây, điều này cho thấy rõ rằng print tự nó không an toàn, điều bạn có thể mong đợi là các dòng riêng lẻ không được xen kẽ với nhau.

DDDDDDDDDDDDDDDDDDDDDDDDDJJJJJJJJJJJJJJJJJJJJJJJJJ

JJJJJJJJJJJJJJJJJJJJJJJJJ
DDDDDDDDDDDDDDDDDDDDDDDDDGGGGGGGGGGGGGGGGGGGGGGGGG
GGGGGGGGGGGGGGGGGGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHH


FFFFFFFFFFFFFFFFFFFFFFFFF
IIIIIIIIIIIIIIIIIIIIIIIIICCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCC
IIIIIIIIIIIIIIIIIIIIIIIII

EEEEEEEEEEEEEEEEEEEEEEEEE

EEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFF

BBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBB

Vì vậy, cuối cùng sự an toàn của print được xác định bởi chiến lược đệm được sử dụng.

Bật bảng nội dung thanh bên

Khi làm việc với các chủ đề, có một số khuyến nghị và quy tắc. Nếu họ được tôn trọng, việc làm việc với các chủ đề sẽ dễ dàng hơn và có khả năng sẽ không có vấn đề gì với các chủ đề. Tất nhiên, theo thời gian, sẽ có các nhiệm vụ sẽ yêu cầu vi phạm các khuyến nghị. Tuy nhiên, trước khi làm như vậy, tốt hơn là cố gắng đáp ứng nhiệm vụ bằng cách tuân thủ các đề xuất. Nếu điều này là không thể, thì chúng ta nên tìm cách bảo mật giải pháp để dữ liệu không bị hỏng.

Tính năng rất quan trọng của việc làm việc với các chủ đề: với một số lượng nhỏ các luồng và các nhiệm vụ thử nghiệm nhỏ, mọi thứ đều hoạt động. Ví dụ: in đầu ra khi kết nối với 20 thiết bị trong 5 luồng sẽ hoạt động bình thường. Nhưng khi được kết nối với một số lượng lớn các thiết bị có một số lượng lớn các luồng, hóa ra đôi khi các tin nhắn trùng nhau. Tính đặc thù này xuất hiện rất thường xuyên, vì vậy đừng tin vào phiên bản khi mọi thứ hoạt động trên các ví dụ cơ bản, hãy tuân theo các quy tắc làm việc với các chủ đề.

Trước khi xử lý các quy tắc, chúng tôi phải đối phó với thuật ngữ an toàn chủ đề. An toàn chủ đề là một khái niệm mô tả công việc với các chương trình đa luồng. Mã được coi là an toàn cho luồng nếu nó có thể hoạt động bình thường với nhiều luồng.

Ví dụ, hàm print không an toàn cho luồng. Điều này được chứng minh bằng thực tế là khi mã thực thi print từ các luồng khác nhau, các thông báo trong đầu ra có thể được trộn lẫn. Có thể có đầu ra với một phần của tin nhắn từ luồng đầu tiên, sau đó là một phần từ luồng thứ hai, sau đó là một phần từ luồng thứ nhất, v.v. Đó là, hàm print không hoạt động bình thường (như nó phải) trong luồng. Trong trường hợp này, người ta nói rằng chức năng print không an toàn cho luồng.

Nói chung, không có vấn đề gì nếu mỗi chủ đề hoạt động với tài nguyên riêng của nó. Ví dụ: mỗi luồng ghi dữ liệu vào tệp của riêng mình. Tuy nhiên, điều này không phải lúc nào cũng có thể hoặc có thể làm phức tạp giải pháp.

Ghi chú

Những khuyến nghị này thường được viết cho những người mới bắt đầu lập trình trên Python. Tuy nhiên, chúng có xu hướng liên quan đến hầu hết các lập trình viên viết ứng dụng cho người dùng thay vì khung.

Mô -đun đồng thời. Bản thân giao diện mô -đun khuyến khích điều này, nhưng tất nhiên nó không cấm phá vỡ nó.

  1. Tuy nhiên, trước khi làm quen với đồng thời. Nó sẽ được sử dụng thay vì hàm print không an toàn cho luồng.

  2. Là chủ đề python

Python không phải là do tự chủ của nó an toàn. Nhưng có những động thái để thay đổi điều này: Nogil, v.v. Loại bỏ Gil không tạo ra các chức năng an toàn.

  1. Python 3 có hỗ trợ đ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.

  • Là chủ đề printf ()

  1. Nếu có khả năng, hãy tránh giao tiếp giữa các chủ đề trong quá trình làm việc của họ. Đây không phải là một nhiệm vụ dễ dàng và tốt nhất là tránh nó.

  2. Thực hiện theo nguyên tắc nụ hôn (giữ cho nó đơn giản, ngu ngốc) - cố gắng làm cho giải pháp đơn giản nhất có thể.

Ghi chú

Những khuyến nghị này thường được viết cho những người mới bắt đầu lập trình trên Python. Tuy nhiên, chúng có xu hướng liên quan đến hầu hết các lập trình viên viết ứng dụng cho người dùng thay vì khung.

Mô -đun đồng thời. Bản thân giao diện mô -đun khuyến khích điều này, nhưng tất nhiên nó không cấm phá vỡ nó.

Tuy nhiên, trước khi làm quen với đồng thời. Nó sẽ được sử dụng thay vì hàm print không an toàn cho luồng.

Là chủ đề python

Python không phải là do tự chủ của nó an toàn. Nhưng có những động thái để thay đổi điều này: Nogil, v.v. Loại bỏ Gil không tạo ra các chức năng an toàn.. But there are moves to change this: NoGil, etc. Removing the GIL does not make functions thread-safe.

Python 3 có hỗ trợ đ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. because Python on the Cpython interpreter does not support true multi-core execution via multithreading. However, Python does have a threading library.

Là chủ đề printf ()

Các hàm c printf () và scanf () tiêu chuẩn sử dụng stdio để chúng an toàn cho luồng.they are thread-safe.