文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中Condition如何使用

2023-06-17 16:16

关注

Python中Condition如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Condition 算是 Lock 和 Event 的杂交版本,除了作为 Lock 的基本功能外,还提供了 wait() 和 notify() 作为线程间 "消息通知"。

from threading import *  from time import *  condi = Condition()  def t1():  condi.acquire()  try:  for i in range(10):  print currentThread().name, i  sleep(1)  if (i == 4): condi.wait()

# wait() 释放锁,并进入等待状态。直到接收到 notify() 发送的消息后再次试图获取锁,继续后续代码执行。

finally:  condi.release()  def t2():  condi.acquire()  try:  for i in range(10):  print currentThread().name, i  sleep(1)  finally:  condi.notify()

# 在释放锁前通知等待的线程准备起床。

condi.release()  Thread(target=t1).start()  Thread(target=t2).start()

输出:

$ ./main.py  Thread-1 0  Thread-1 1  Thread-1 2  Thread-1 3

Thread-1 4 <--- Thread1 释放锁,开始等待。Thread-2 0 <--- Thread2 获得锁,开始执行。

Thread-2 1  Thread-2 2  Thread-2 3  Thread-2 4  Thread-2 5  Thread-2 6  Thread-2 7  Thread-2 8

Thread-2 9 <--- Thread2 发送通知,并释放锁。Thread-1 5 <--- Thread1 收到消息,再次拿到锁,开始未完成的工作。

Thread-1 6  Thread-1 7  Thread-1 8  Thread-1 9

wait() 实际可以分解为 "condi.release(); ... acquire()" 这两个动作。我们可以使用 Condition 包装已有的锁,当然也可以用 with/as 来改善我们的代码。

lock = RLock()  condi = Condition(lock)  def t1():  with condi:  for i in range(10):  print currentThread().name, i  sleep(1)  if (i == 4): condi.wait()  def t2():  with lock:  for i in range(10):  print currentThread().name, i  sleep(1)  condi.notify()  Thread(target=t1).start()  Thread(target=t2).start()

注意调用 notify() 和 notifyall() 的线程必须事先获得锁,否则会抛出异常。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯