观书散遗帙,探古穷至妙。这篇文章主要讲述多线程加锁#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干货盘点#】
推荐阅读
- 开启SELINUX真的就那么难吗()
- #yyds干货盘点#linux shell 脚本,将变量拼接到命令中。
- #yyds干货盘点# linux加入域环方法
- K8SCentOS7.x通过kubeadm安装Kubernetes1.15.2
- centos 添加多个pip源
- SangFor授权上架网络配置(AC12.0.46)
- JavaScript之预编译学习(内含多个面试题) #yyds干货盘点#
- 使用VM虚拟机安装CentOS-stream系统
- 带你了解HTML基本标签的使用#yyds干货盘点#