多线程加锁#yyds干货盘点#

观书散遗帙,探古穷至妙。这篇文章主要讲述多线程加锁#yyds干货盘点#相关的知识,希望能为你提供帮助。




1 为什么要加锁python3多线程可以不加锁,每个多线程就自带锁
python2多线程必须加锁,多线程本身不带锁
多线程同时执行一个操作时(例如队列的get操作),队列为空时get属于异常行为,因此线程中的队列操作需要进行加锁处理,这样确保判断队列为空的时候没有get操作,这样就不会对空队列进行操作了


2 手动开关锁#!/usr/bin/env  python   
#coding:utf-8   
import threading
...   
## 创建锁
cstor_get_obj_lock =threading.Lock()
class  del_obj_from_list(threading.Thread):   
        def  __init__(self,  bucket_name,  del_obj_queue):   
                threading.Thread.__init__(self)   
                self.del_obj_queue  =  del_obj_queue   
                self.bucket_name  =  bucket_name   
        def  run(self):   
                        ...   
                        global  cstor_get_obj_lock   
                        objs_list  =  []   
                        ## 加锁
                    cstor_get_obj_lock.acquire()   
                        ## 队列不为空,则进行get操作
                        if  self.del_obj_queue.qsize()  !=  0  :   
                                objs_list.append(Key:self.del_obj_queue.get(1,3))   
                                self.del_obj_queue.task_done()   
                        ## 释放锁
                    cstor_get_obj_lock.release()   
...   
3 自动开关锁#!/usr/bin/env  python   
#coding:utf-8   
import  time,  threading   
...   
## 创建锁
cstor_get_obj_lock  =threading.Lock()   
class  del_obj_from_list(threading.Thread):   
        def  __init__(self,  bucket_name,  del_obj_queue):   
                threading.Thread.__init__(self)   
                self.del_obj_queue  =  del_obj_queue   
                self.bucket_name  =  bucket_name   
        def  run(self):   
                        ...   
                        global  cstor_get_obj_lock   
                        objs_list  =  []   
                        ## 自动开关锁
                  with  cstor_get_obj_lock  :   
                                if  self.del_obj_queue.qsize()  !=  0  :   
                                        objs_list.append(Key:self.del_obj_queue.get(1,3))   
                                        self.del_obj_queue.task_done()   


...   
【多线程加锁#yyds干货盘点#】


    推荐阅读