Hướng dẫn what does threading lock do python? - khóa luồng làm gì python?

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu về các điều kiện chủng tộc và cách sử dụng đối tượng khóa phân trăn để ngăn chặn chúng.: in this tutorial, you’ll learn about the race conditions and how to use the Python threading Lock object to prevent them.

Tình trạng cuộc đua là gì

Một điều kiện cuộc đua xảy ra khi hai luồng cố gắng truy cập đồng thời một biến được chia sẻ.

Chủ đề đầu tiên đọc giá trị từ biến được chia sẻ. Chủ đề thứ hai cũng đọc giá trị từ cùng một biến được chia sẻ.

Sau đó, cả hai luồng cố gắng thay đổi giá trị của biến được chia sẻ. Và họ đua để xem chủ đề nào viết một giá trị cho biến cuối cùng.

Giá trị từ luồng ghi vào biến được chia sẻ cuối cùng được bảo tồn vì nó ghi đè lên giá trị mà chủ đề trước đó đã viết.

Ví dụ về điều kiện chủng tộc

Ví dụ sau đây minh họa một điều kiện chủng tộc:

from threading import Thread from time import sleep counter = 0 def increase(by): global counter local_counter = counter local_counter += by sleep(0.1) counter = local_counter print(f'counter={counter}') # create threads t1 = Thread(target=increase, args=(10,)) t2 = Thread(target=increase, args=(20,)) # start the threads t1.start() t2.start() # wait for the threads to complete t1.join() t2.join() print(f'The final counter is {counter}')

Code language: Python (python)

Trong chương trình này, cả hai luồng đều cố gắng sửa đổi giá trị của biến

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 cùng một lúc. Giá trị của biến

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 phụ thuộc vào luồng nào hoàn thành cuối cùng.

Nếu luồng

counter=10 counter=20 The counter is 20

Code language: Python (python)
8 hoàn thành trước luồng

counter=10 counter=20 The counter is 20

Code language: Python (python)
9, bạn sẽ thấy đầu ra sau:

counter=10 counter=20 The counter is 20

Code language: Python (python)

Nếu không, bạn sẽ thấy đầu ra sau:

counter=20 counter=10 The final counter is 10

Code language: Python (python)

Làm thế nào nó hoạt động.

Đầu tiên, nhập lớp

counter=20 counter=10 The final counter is 10

Code language: Python (python)
0 từ mô -đun

counter=20 counter=10 The final counter is 10

Code language: Python (python)
1 và hàm

counter=20 counter=10 The final counter is 10

Code language: Python (python)
2 từ mô -đun

counter=20 counter=10 The final counter is 10

Code language: Python (python)
3:

from threading import Thread from time import sleep

Code language: Python (python)

Thứ hai, xác định một biến toàn cầu được gọi là

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 có giá trị bằng không:

counter = 0

Code language: Python (python)

Thứ ba, xác định một hàm tăng giá trị của biến

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 theo một số:

def increase(by): global counter local_counter = counter local_counter += by sleep(0.1) counter = local_counter print(f'counter={counter}')

Code language: Python (python)

Thứ tư, tạo hai chủ đề. Chủ đề thứ nhất tăng

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 lên 10 trong khi luồng thứ hai tăng

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 lên 20:

t1 = Thread(target=increase, args=(10,)) t2 = Thread(target=increase, args=(20,))

Code language: Python (python)

Thứ năm, bắt đầu các chủ đề:

t1.start() t2.start()

Code language: Python (python)

Thứ sáu, từ chủ đề chính, đợi các luồng T1 và T2 hoàn thành:

t1.join() t2.join()

Code language: Python (python)

Cuối cùng, hiển thị giá trị cuối cùng của biến

counter=10 counter=20 The counter is 20

Code language: Python (python)
6:

print(f'The final counter is {counter}')

Code language: Python (python)

Sử dụng khóa để ngăn chặn tình trạng cuộc đua

Để ngăn chặn các điều kiện chủng tộc, bạn có thể sử dụng lớp

counter=20 counter=10 The final counter is 10

Code language: Python (python)
9 từ mô -đun

counter=20 counter=10 The final counter is 10

Code language: Python (python)
1. Một khóa có hai trạng thái: khóa và mở khóa.

Đầu tiên, hãy tạo một thể hiện lớp

counter=20 counter=10 The final counter is 10

Code language: Python (python)
9:

counter=10 counter=20 The counter is 20

Code language: Python (python)
0

Theo mặc định, khóa có trạng thái mở khóa cho đến khi bạn có được nó.

Thứ hai, có được khóa bằng cách gọi phương thức

from threading import Thread from time import sleep

Code language: Python (python)
2:

counter=10 counter=20 The counter is 20

Code language: Python (python)
1

Thứ ba, hãy giải phóng khóa sau khi luồng hoàn thành thay đổi biến được chia sẻ:

counter=10 counter=20 The counter is 20

Code language: Python (python)
2

Ví dụ sau đây cho thấy cách sử dụng đối tượng

counter=20 counter=10 The final counter is 10

Code language: Python (python)
9 để ngăn chặn điều kiện chủng tộc trong chương trình trước:

counter=10 counter=20 The counter is 20

Code language: Python (python)
3

Output:

counter=10 counter=20 The counter is 20

Code language: Python (python)
4

Làm thế nào nó hoạt động.

  • Đầu tiên, nhập lớp

    counter=20 counter=10 The final counter is 10

    Code language: Python (python)
    0 từ mô -đun

    counter=20 counter=10 The final counter is 10

    Code language: Python (python)
    1 và hàm

    counter=20 counter=10 The final counter is 10

    Code language: Python (python)
    2 từ mô -đun

    counter=20 counter=10 The final counter is 10

    Code language: Python (python)
    3:
  • Thứ hai, xác định một biến toàn cầu được gọi là

    counter=10 counter=20 The counter is 20

    Code language: Python (python)
    6 có giá trị bằng không:
  • counter = 0

    Code language: Python (python)

Thứ ba, xác định một hàm tăng giá trị của biến

counter=10 counter=20 The counter is 20

Code language: Python (python)
6 theo một số:

counter=10 counter=20 The counter is 20

Code language: Python (python)
5

Thứ tư, tạo hai chủ đề. Chủ đề thứ nhất tăng counter=10 counter=20 The counter is 20 Code language: Python (python)6 lên 10 trong khi luồng thứ hai tăng counter=10 counter=20 The counter is 20 Code language: Python (python)6 lên 20:

  • Thứ năm, bắt đầu các chủ đề:
  • Thứ sáu, từ chủ đề chính, đợi các luồng T1 và T2 hoàn thành:
  • Cuối cùng, hiển thị giá trị cuối cùng của biến

    counter=10 counter=20 The counter is 20

    Code language: Python (python)
    6:
  • Sử dụng khóa để ngăn chặn tình trạng cuộc đua

Để ngăn chặn các điều kiện chủng tộc, bạn có thể sử dụng lớp

counter=20 counter=10 The final counter is 10

Code language: Python (python)
9 từ mô -đun

counter=20 counter=10 The final counter is 10

Code language: Python (python)
1. Một khóa có hai trạng thái: khóa và mở khóa.

Mục đích của khóa chỉ trong Python là gì?

Khóa giúp chúng tôi truy cập hiệu quả một tài nguyên được chia sẻ trong một chương trình để ngăn chặn tham nhũng dữ liệu, nó tuân theo loại trừ lẫn nhau vì chỉ có một luồng có thể truy cập vào một tài nguyên cụ thể tại một thời điểm.help us in efficiently accessing a shared resource in a program in order to prevent corruption of data, it follows mutual exclusion as only one thread can access a particular resource at a time.

Nó có nghĩa là gì đối với một chủ đề bị khóa?

Câu lệnh khóa khóa đảm bảo rằng không có luồng nào thực thi.Điều kiện này vẫn có hiệu lực cho đến khi luồng được mở khóa (với luồng mở khóa) hoặc luồng kết thúc.ensures that no other thread executes. This condition remains in effect until the thread is unlocked (with UNLOCK THREAD) or the thread terminates.

Tại sao khóa cần thiết trong một máy chủ ren?

Khóa là một tính năng rất quan trọng làm cho đa luồng có thể.Khóa là một kỹ thuật đồng bộ hóa được sử dụng để giới hạn quyền truy cập vào một tài nguyên trong một môi trường có nhiều luồng thực thi.to limit access to a resource in an environment where there are many threads of execution.

Sự khác biệt giữa khóa luồng và khóa một khóa là gì?

Khóa chỉ có thể có được một lần và một khi có được, nó không thể được mua lại bằng cùng một luồng hoặc bất kỳ luồng nào khác cho đến khi nó được phát hành.Một luồng.RLOCK có thể được thu thập nhiều lần bởi cùng một luồng, mặc dù một khi được mua bởi một luồng, nó không thể có được bằng một luồng khác cho đến khi nó được phát hành.