Python 프로그래밍 언어를 처음 접하는 사람들은 Python 프로그래밍을 처음 배우기 시작할 때 Python 스레드 동기화에 대해 거의 알지 못합니다. python more 스레드에 대한 지식 동기화 및 파이썬 다중 스레드 잠금.
스레드 동기화
여러 스레드가 공동으로 특정 데이터를 수정하는 경우 예측할 수 없는 결과가 발생할 수 있습니다. 데이터의 정확성을 보장하려면 여러 스레드를 동기화해야 합니다.
Thread 객체의 Lock 및 Rlock을 사용하여 간단한 스레드 동기화를 구현할 수 있습니다. 두 객체 모두 한 번에 하나의 스레드에서만 작업해야 하는 데이터의 경우 획득 및 해제 방법을 사용할 수 있습니다. 방법 사이. 다음과 같습니다:
멀티스레딩의 장점은 동시에 여러 작업을 실행할 수 있다는 것입니다(적어도 그렇게 느껴집니다). 그러나 스레드가 데이터를 공유해야 하는 경우 데이터가 동기화되지 않는 문제가 발생할 수 있습니다.
이 상황을 생각해 보세요. 목록의 모든 요소가 0이고, "set" 스레드는 모든 요소를 뒤에서 앞으로 1로 변경하며, "print" 스레드는 목록을 앞에서 뒤로 읽고 인쇄하는 일을 담당합니다.
그런 다음 "set" 스레드가 변경되기 시작하면 "print" 스레드가 목록을 인쇄하고 출력은 0과 1의 절반이 될 것입니다. 이것이 데이터의 비동기화입니다. 이러한 상황을 방지하기 위해 잠금 개념이 도입되었습니다.
멀티 스레드 잠금
잠금에는 잠김과 잠금 해제의 두 가지 상태가 있습니다. "set"과 같은 스레드가 공유 데이터에 액세스하려고 할 때마다 먼저 잠금을 획득해야 합니다. "print"와 같은 다른 스레드가 이미 잠금을 획득한 경우 "set" 스레드가 일시 중지되도록 해야 합니다. 이는 동기식 차단입니다. 스레드 " Print "가 액세스가 완료되고 잠금이 해제된 후 스레드 "설정"이 계속되도록 합니다.
이 처리 후 목록을 인쇄할 때 모두 0 또는 모두 1이 출력되므로 더 이상 반은 0이고 반은 1인 민망한 장면이 발생하지 않습니다.
예제
예제는 다음과 같습니다.
#!/usr/bin/python # -*- coding: UTF-8 -*- import threading import time class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name # 获得锁,成功获得锁定后返回True # 可选的timeout参数不填时将一直阻塞直到获得锁定 # 否则超时后将返回False threadLock.acquire() print_time(self.name, self.counter, 3) # 释放锁 threadLock.release() def print_time(threadName, delay, counter): while counter: time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 threadLock = threading.Lock() threads = [] # 创建新线程 thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # 开启新线程 thread1.start() thread2.start() # 添加线程到线程列表 threads.append(thread1) threads.append(thread2) # 等待所有线程完成 for t in threads: t.join() print "Exiting Main Thread"
위 내용은 이 글의 전부입니다. 이 글은 주로 python 멀티 스레드 동기화 관련 지식을 소개하는 내용입니다. 위에서 말한 내용을 이해하십시오. 이 글에서 제가 설명한 내용이 여러분에게 도움이 되고 파이썬을 더 쉽게 배울 수 있기를 바랍니다.
더 많은 관련 지식을 알고 싶으시면 PHP 중국어 홈페이지의 Python tutorial 칼럼을 방문해 주세요.
위 내용은 Python 다중 스레드 동기화란 무엇입니까? 스레드 잠금이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!