【发布时间】:2019-06-28 05:02:47
【问题描述】:
我正在创建一个多线程程序,我希望一次只有 1 个线程进入创建套接字并发送一些数据的关键部分,而所有其他线程等待该变量清除。
- 我尝试了threading.Events,但后来意识到在set() 上它会通知所有等待的线程。虽然我只想通知一个。
- 尝试过的锁(获取和释放)。它非常适合我的场景,但我知道长时间的锁争用是昂贵的。获得锁后,我的线程正在执行许多功能,因此导致持有锁很长时间。
- 现在我尝试了 threading.conditions。只是想知道如果长时间获取并保持条件,这不是一个好习惯,因为它也使用锁。 谁能为我的问题陈述提出更好的方法。
【问题讨论】:
-
第二个听起来好像你让关键部分的范围太大了
-
如果数据创建时间过长,也许你应该在进入临界区之前创建它
-
acc to geeksforgeeks.org/socket-programming-multi-threading-python这篇文章,可以使用acquire & release方式。
-
@flakes 是的,关键部分太大,但由于其他一些限制,我以后无法构建。
-
你不能神奇地让你的代码运行得更快。您有一个需要 n 秒的关键部分,并且您每秒的请求数大于 1/n,因此您将累积积压。再多的锁定也无法解决这个问题。您需要通过缩小其范围、提高其性能或在更快的硬件上运行代码来减少完成关键部分所需的时间
标签: python python-multithreading condition-variable critical-section