多线程加锁#yyds干货盘点#
Posted 坚韧的石头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程加锁#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干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# Java | 关于synchronized相关理解
#yyds干货盘点#海量数据下如何使用多线程的导出 Excel