python 中如何用linux 信号量,27 python 初学(信号量、条件变量、同步条件、队列)...

参考博客: www.cnblogs.com/yuanchenqi/articles/5733873.html

semaphore 信号量:

condition 条件变量:

event同步条件:条件同步和条件变量同步差不多意思,只是少了锁功能。因为条件同步设计于别访问共享资源的条件环境

多线程利器(queue):队列本身有一把锁

q.put(‘xiaoming’, 0)

q.get(0)

q.qsize()  返回队列大小

q.empty()

q.full()

semaphore:

# _author: lily

# _date: 2019/1/29

import threading , time

class MyThread(threading.Thread):

def run(self):

if semaphore.acquire():

print(self.name)

time.sleep(3)

semaphore.release()

if __name__ == '__main__':

semaphore = threading.BoundedSemaphore(5)

thread_list = []

for i in range(100):

thread_list.append(MyThread())

for i in thread_list:

i.start()

condition:

# _author: lily

# _date: 2019/1/29

import threading,time

from random import randint

class Producer(threading.Thread):

def run(self):

global L

while True:

val = randint(0, 100)

print('Producer', self.name, ': Append', str(val), L)

if lock_con.acquire():

L.append(val)

lock_con.notify()

lock_con.release()

time.sleep(3)

class Consumer(threading.Thread):

def run(self):

global L

while True:

lock_con.acquire()

if len(L) == 0:

lock_con.wait()

print('Consumer', self.name, ': Delete', str(L[0]), L)

del L[0]

lock_con.release()

time.sleep(0.25)

if __name__ == '__main__':

L = []

lock_con = threading.Condition()

threads = []

for i in range(5):

threads.append(Producer())

threads.append(Consumer())

for t in threads:

t.start()

for t in threads:

t.join()

queue:

# _author: lily

# _date: 2019/1/30

import queue

# q = queue.Queue()

q = queue.Queue(3) # 设置队列大小

q.put('xiaoming', 0)

q.put('xiaohong')

q.put('xiaofang', 0) # 队列大小为 2 ,当要放置第三个数据的时候,1会被阻塞,0会报错。默认参数为1

print(q.get())

print(q.get())

print(q.get())

print(q.get(0)) # 参数为 0 的时候如果队列空了,还去取值,就会报错。参数为 1 会被阻塞

Python学习---线程锁/信号量/条件变量同步/线程池1221

线程锁 问题现象: 多线程情况下,CPU遇到阻塞会进行线程的切换,所以导致执行了tmp-=1的值还未赋值给num=tmp,另一个线程2又开始了tmp -=1,所以导致最后的值重复赋值给了num,所以出 ...

python多线程编程5: 条件变量同步-乾颐堂

互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还 ...

练习生产者与消费者-PYTHON多线程中的条件变量同步-Queue

以前练习过,但好久不用,手生,概念也生了, 重温一下.. URL: http://www.cnblogs.com/holbrook/tag/%E5%A4%9A%E7%BA%BF%E7%A8%8B/ ~ ...

Linux 多线程条件变量同步

条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作.条件变量使用的条件本身是需要使用互斥量进行保护的 ...

go条件变量同步机制

sync.Cond代表条件变量,需要配置锁才能有用 package main import ( "fmt" "runtime" "sync" ...

039条件变量同步(Condition)

也是锁,这个锁多加了wait(),notify()唤醒一个进程,notifyall()唤醒全部进程方法,创建的时候默认是Rlock类型的锁,可以设置为lock类型的,默认就ok from random ...

26 python 初学(线程、同步锁、死锁和递归锁)

参考博客: www.cnblogs.com/yuanchenqi/articles/5733873.html 并发:一段时间内做一些事情 并行:同时做多件事情 线程是操作系统能够进行运算调度的基本单位 ...

Python:Day29 信号量、条件变量

信号量:semaphore 信号量是用来控制线程并发数的.(理解:虽然GIL任意时刻都只有一个线程被执行,但是所有线程都有资格去抢,semaphore就是用来控制抢的GIL的数量,只有获取了semap ...

Python 线程同步变量,同步条件,列队

条件变量同步 有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 ...

随机推荐

【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯

实验指导书及代码包下载: http://pan.baidu.com/s/1dEnH5dB iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

TCP/IP详解 笔记八

UDP协议 UDP是传输层协议,提供无连接不可靠的数据传输,其优点失效率高,确定确定是无序不可靠. 报文格式 UDP头部 TCP和UDP的端口号是独立的 UDP长度是指UDP数据报的总长度 UDP的校 ...

Linux学习之路:变量值的删除、替代和替换

一.删除 var为变量名, ${var#v*r}:从左到右匹配将:头部是“v”,尾部是“r”的最短的部分删除 ${var##v*r}:从左到右匹配将:头部是“v”,尾部是“r”的最长的部分删除 ${v ...

sqlplus 可以登录 plsql 不能登录

最开始我以为是system用户被锁定了,但是解锁后仍然不可以登录.大神指导之后可以了,说是缺少监听器,解决过程如下: 1.将“tnsnames.ora”和“listener.ora”两个文件里的“lo ...

实用推荐:12款Linux系统恢复工具

12款Linux系统恢复工具 电脑死机,系统崩溃,总会给电脑使用者带来一定的损失.你是否不小心删除你的纪念图片?安装新系统时候,擦除了分区表?无法读取旧CD里面的数据?别急嘛-我们将会给您推荐一些免费 ...

image图片拉伸

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1d9421 } p.p2 ...

ubuntu权限管理常用命令

1.chmod 第一种方式 chomd [{ugoa}{+-=}{rwx}] [文件或者目录] u 代表该文件所属用户 g 代表该文件所属用户组 o 代表访客 a 代表所有用户 +-=分别表示增加权限 ...

DSAPI 调用串口选择界面

在DSAPI中,可以通过简单的代码调用串口选择界面,当用户选择了其中一个串口时,将返回选择的串口名称(或序号). Dim 串口名称 As String = DSAPI.串口通讯.显示串口选择界面.选择 ...

【dp】 背包问题

问题一:01背包 题目: [题目描述] 一个旅行者有一个最多能装 M 公斤的背包,现在有 n件物品,它们的重量分别是W1,W2,...,Wn它们的价值分别为C1,C2,...,Cn求旅行者能获得最大总 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值