Đố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ó.
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.
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 []
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ó.
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.