>백엔드 개발 >파이썬 튜토리얼 >Python 스레드 잠금 사용 방법(예제 분석)

Python 스레드 잠금 사용 방법(예제 분석)

乌拉乌拉~
乌拉乌拉~원래의
2018-08-23 17:42:061812검색

이 글에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.