Hướng dẫn python thread-safe counter - bộ đếm an toàn chuỗi trăn
Bạn có thể tạo một bộ đếm an toàn bằng cách sử dụng khóa mutex thông qua lớp Threading.lock.counter thread-safe by using a mutex lock via the threading.Lock class. Show Trong hướng dẫn này, bạn sẽ khám phá cách phát triển một bộ đếm an toàn chủ đề. Bắt đầu nào.
Một chủ đề là một chủ đề thực thi trong một chương trình máy tính. Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản. Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời. Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng.threading.Thread class. Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:
Trong lập trình đồng thời, chúng ta thường cần cập nhật một bộ đếm từ nhiều luồng. Điều này có thể là vì nhiều lý do, chẳng hạn như:
Cập nhật một biến số từ nhiều luồng không an toàn và có thể dẫn đến một điều kiện cuộc đua. Bạn có thể tìm hiểu thêm về điều kiện cuộc đua ở đây:
Làm thế nào chúng ta có thể tạo một bộ đếm an toàn chủ đề? Cách tạo bộ đếm an toàn chủ đềVí dụ về bộ đếm chủ đề không an toànthreading.Lock class. Ví dụ về bộ đếm an toàn chủ đề Đọc thêm
Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản. Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời.acquire() function before accessing the counter variable and calling release() after work with the counter variable has completed. Đọc thêm
Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng.threading.Lock is to use the context manager which will release the lock automatically once the block is exited. Đọc thêm
Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời.
Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn: Chủ đề trong Python: Hướng dẫn hoàn chỉnh Ví dụ về bộ đếm chủ đề không an toànVí dụ về bộ đếm an toàn chủ đề Đọc thêm TakeawaysThreadUnsafeCounter.
Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời.
Trong lập trình đồng thời, chúng ta thường cần cập nhật một bộ đếm từ nhiều luồng.increment().
Đối chiếu các giá trị từ các nguồn dữ liệu khác nhau.
Bạn có thể tìm hiểu thêm về điều kiện cuộc đua ở đây:ThreadUnsafeCounter class is listed below.
Đếm các nhiệm vụ hoàn thành bởi nhiều chủ đề công nhân. Đối chiếu các giá trị từ các nguồn dữ liệu khác nhau.
Chủ đề trong Python: Hướng dẫn hoàn chỉnhThreadUnsafeCounter to be shared among all threads.
Sau đó, chúng ta có thể tạo 10 luồng sẽ được cấu hình để gọi hàm Task () này và chuyển thể hiện bộ đếm dưới dạng đối số.task() function and pass the counter instance as an argument.
Tiếp theo, chúng ta có thể bắt đầu tất cả mười chủ đề và sau đó đợi chúng kết thúc.
# Đợi tất cả các chủ đề kết thúc
# Báo cáo giá trị của bộ đếm Với mười luồng, mỗi luồng tăng 100.000 lần, chúng tôi hy vọng giá trị cuối cùng của bộ đếm là 1.000.000.
# Báo cáo giá trị của bộ đếmThreadUnsafeCounter class. Với mười luồng, mỗi luồng tăng 100.000 lần, chúng tôi hy vọng giá trị cuối cùng của bộ đếm là 1.000.000. Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây. # SuperfastPython.com # Ví dụ về một bộ đếm không an toàn (có điều kiện chủng tộc) từ luồng nhập luồng_counter variable is updated in a thread unsafe manner. # Chủ đề lớp quầy không an toàn & nbsp; & nbsp; & nbsp; & nbsp;# Constructor
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# khởi tạo bộ đếm & nbsp; & nbsp; & nbsp; & nbsp;# tăng bộ đếm & nbsp; & nbsp; & nbsp; & nbsp; def tăng (self): & nbsp; & nbsp; & nbsp; & nbsp;# Nhận giá trị bộ đếm & nbsp; & nbsp; & nbsp; & nbsp; def value (self): # Nhiệm vụ được thực hiện bởi các chủ đềNhiệm vụ def (Counter):ThreadUnsafeCounter class that we developed in the previous section can be updated to be thread-safe. Chạy ví dụ đầu tiên tạo ra một thể hiện của lớp ThreadunSafeC gặp gỡ của chúng tôi.threading.Lock instance to the class to protect the counter variable. Tiếp theo, chúng tôi tạo và định cấu hình mười chủ đề mà tất cả đều cố gắng tăng bộ đếm 100.000 lần. Các luồng sau đó được bắt đầu và các khối chủ đề chính cho đến khi tất cả các luồng mới kết thúc.
Có một điều kiện cuộc đua.increment() method, we can first acquire the lock then change the value using the context manager.
Khóa học luồng python miễn phívalue() method, we can again protect the counter variable by first acquiring the lock.
Khóa học luồng python miễn phíThreadSafeCounter. The updated thread-safe version of the class is listed below.
& nbsp; & nbsp; & nbsp; & nbsp;# Nhận giá trị bộ đếm & nbsp; & nbsp; & nbsp; & nbsp; def value (self):
Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây. # SuperfastPython.com # Ví dụ về bộ đếm an toàn chủ đề từ luồng nhập luồng từ khóa nhập khẩu ren # Chủ đề lớp quầy an toàn# Nhiệm vụ được thực hiện bởi các chủ đề
# Đợi tất cả các chủ đề kết thúc# Báo cáo giá trị của bộ đếm Chạy ví dụ đầu tiên tạo ra trường hợp truy cập được chia sẻ trước đó. Sau đó, tạo và bắt đầu mười luồng, mỗi chủ đề đang cố gắng tăng bộ đếm 100.000 lần mỗi lần. |