亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

掌握 Python 中的线程间通信:同步和数据共享

线程间通信是指Python多线程程序中线程之间实现通信和同步的过程。

一般来说,Python 中的线程在进程内共享相同的内存空间,这允许它们通过共享变量、对象和线程模块提供的专用同步机制来交换数据并协调其活动。

为了促进线程间通信,线程模块提供了各种同步原语,例如锁、事件、条件和信号量对象。在本教程中,您将学习如何使用事件和条件对象来提供多线程程序中线程之间的通信。

事件对象

事件对象管理内部标志的状态,以便线程可以等待或设置。事件对象提供了控制该标志状态的方法,允许线程根据共享条件同步其活动。

该标志最初为 false,使用 set() 方法变为 true,并使用clear() 方法重置为 false。 wait() 方法会阻塞,直到标志为 true。

以下是事件对象的关键方法 -

示例

以下代码尝试模拟由交通信号灯绿色或红色状态控制的交通流。

程序中有两个线程,针对两个不同的功能。 signal_state() 函数定期设置和重置指示信号从绿色变为红色的事件。

Traffic_flow() 函数等待事件被设置,并运行循环直到它保持设置状态。

<前>06

输出

执行上述代码时,您将得到以下输出 -

<前>15

条件对象

Python的线程模块中的Condition对象提供了更高级的同步机制。它允许线程在继续之前等待来自另一个线程的通知。 Condition 对象始终与锁相关联,并提供线程之间的信号发送机制。

以下是 threading.Condition() 类的语法 -

<前>23

以下是 Condition 对象的关键方法 -

示例

此示例演示了使用 Python 线程模块的 Condition 对象进行线程间通信的简单形式。这里 thread_a 和 thread_b 使用 Condition 对象进行通信,thread_a 等待直到收到来自 thread_b 的通知。 thread_b 在通知 thread_a 之前休眠 2 秒,然后完成。

<前>37

输出

执行上述代码时,您将得到以下输出 -

<前>45

示例

这是另一个代码,演示了如何使用 Condition 对象提供线程之间的通信。其中,线程t2运行taskB()函数,线程t1运行taskA()函数。 t1线程获取条件并通知它。

此时t2线程处于等待状态。条件释放后,等待线程继续消耗通知函数生成的随机数。

<前>53

当您执行此代码时,它将产生以下输出 -

<前>66

Python

  1. Python 函数
  2. Python - 函数
  3. 全面的 Python 学习路径和资源
  4. Python 生成器
  5. Python 平均值:如何在 Python 中找到列表的平均值
  6. Python - 基本语法
  7. Python Print() 语句:如何通过示例打印
  8. Python 正则表达式
  9. Python 异常处理:try、catch、finally 和 raise [示例]
  10. Python String strip() 函数与示例
  11. 带有示例的 Python round() 函数
  12. Python字典