多线程套接字程序-处理关键部分

时间:2019-06-28 05:02:47

标签: python python-multithreading condition-variable critical-section

我正在创建一个多线程程序,在该程序中,我一次只想让一个线程进入临界区,该临界区创建一个套接字并发送一些数据,而其他所有线程都等待该变量清除。 / p>

  1. 我尝试了threading.Events,但后来意识到在set()上它将通知所有正在等待的线程。虽然我只想通知一个人。
  2. 尝试锁定(获取并释放)。它很适合我的情况,但我知道很长一段时间内锁争用很昂贵。获取锁后,我的线程执行了许多功能,因此导致持有该锁的时间很长。
  3. 现在我尝试使用threading.conditions。只是想知道是否长时间获取并保持条件,这不是一个好习惯,因为它还使用了锁。 谁能建议我提出问题的更好方法。

1 个答案:

答案 0 :(得分:1)

我将使用一个专用于发送的附加线程。在其他线程放置其发送数据的地方使用Queue。套接字线程以循环方式从队列中获取项目,然后将它们一个接一个地发送。

只要队列为空,.get就会阻塞并且发送线程处于睡眠状态。

“生产者”线程根本没有等待时间,他们只是将其数据放入队列中并继续。

无需担心可能出现的死锁情况。

要停止发送线程,请在队列中放入一些特殊项目(例如,无)。

要启用返回值,请将元组(send_data, return_queue)放在发送队列中。准备好结果后,将其放入return_queue中即可返回。