이 글에서는 Python 스레드 잠금이 무엇인지 알아보겠습니다. Python 스레드 잠금에 대해 알아보고 Python 프로그래밍에서 스레드 잠금이 어떤 역할을 할 수 있는지 알아보세요.
스레드 잠금(Mutex)
여러 스레드가 하나의 프로세스에서 시작될 수 있습니다. 여러 스레드가 상위 프로세스의 메모리 공간을 공유하므로 이때 각 스레드가 동일한 데이터에 액세스할 수 있습니다. 두 스레드가 동시에 동일한 데이터를 수정하려는 경우?
잠금 사용:
Create lock
mutex = threading.Lock()
lock
mutex.acquire([timeout])
release
mutex.release()
import time import threading def addNum(): global num #在每个线程中都获取这个全局变量 print('--get num:',num ) time.sleep(1) num -=1 #对此公共变量进行-1操作 num = 100 #设定一个共享变量 thread_list = [] for i in range(100): t = threading.Thread(target=addNum) t.start() thread_list.append(t) for t in thread_list: #等待所有线程执行完毕 t.join() print('final num:', num )
일반적으로 이 숫자는 결과는 0이어야 하지만 Python 2.7에서 여러 번 실행하면 최종 인쇄된 num 결과가 항상 0이 아닌 것을 알 수 있습니다. 실행될 때마다 결과가 다른 이유는 무엇입니까? 하, 매우 간단합니다. 두 개의 스레드 A와 B가 있다고 가정합니다. 이때 num은 1씩 감소해야 합니다. 두 스레드가 동시에 실행되고 있으므로 두 스레드가 num=100을 가져갈 가능성이 매우 높습니다. 동시에 이 초기 변수는 계산을 위해 CPU로 전달됩니다. 스레드 A가 작업을 완료하면 결과는 99이지만 이때 스레드 B는 작업을 완료하고 결과도 99입니다. 동시에 두 스레드의 작업이 num 변수에 할당되면 결과는 모두 99입니다. 무엇을 해야 할까요? 매우 간단합니다. 각 스레드가 공용 데이터를 수정하려고 할 때 수정이 완료되기 전에 다른 사람이 데이터를 수정하는 것을 방지하기 위해 데이터에 잠금을 추가하여 다른 스레드가 수정을 원할 때 기다려야 합니다. 수정을 완료하고 잠금을 해제한 후에만 이 데이터에 다시 액세스할 수 있습니다.
참고: 3.x에서는 실행하지 마세요. 어떤 이유로든 3.x의 결과는 항상 정확할 수 있습니다.
위 내용이 이 글의 전부입니다. 이번 글은 python mutex lock 관련 지식을 주로 소개합니다. 이 정보를 활용하여 위 내용을 이해하시기 바랍니다. 이 글에서 제가 설명한 내용이 여러분에게 도움이 되고 파이썬을 더 쉽게 배울 수 있기를 바랍니다.
더 많은 관련 지식을 알고 싶으시면 PHP 중국어 홈페이지의 Python tutorial 칼럼을 방문해 주세요.
위 내용은 Python 스레드 잠금 사용 방법(예제 분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!