python - 确定线程何时等待锁释放

标签 python multithreading python-multithreading

锁机制(以及其他机制)的存在是为了防止不同线程同时访问共享资源。想要使用资源的线程被阻塞,必须等待锁释放才能继续。 (如果我错了请纠正我)

我如何判断线程何时正在等待释放锁,何时不等待?换句话说,如何知道线程何时被阻塞?

如果可能的话,我怎么知道这种情况发生了多少次?

最佳答案

您可以对 Lock.acquire() 使用可选的 blocking 参数函数,如果你为阻塞提供False,如Lock.acquire(False),如果无法获取锁(持有),该函数将返回False由另一个线程),否则它将获取锁并返回 True。您可以将其与以下逻辑结合使用来确定您的线程是否会阻塞:

import threading
some_lock = threading.Lock()

# use this code anywhere you need to acquire the lock and check for blocking
if not some_lock.acquire(False):
    print 'BLOCKING!'
    some_lock.acquire() # call again with blocking=True (which is the default)
else:
    print 'Acquired lock without blocking'
# lock has been acquired, make sure you release when done with critical section

打印语句只是为了显示正在发生的事情,将其替换为您想要使用的任何逻辑,例如维护线程阻塞次数的计数器。

关于python - 确定线程何时等待锁释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151766/

相关文章:

websocket - Tornado WebSockets 处理程序的无限 "background"循环

java - 唤醒线程而不会有被阻塞的风险

ios - 调用performSelector的结果: on a "sleeping" thread's current run loop?

python - 多处理 | python中的多线程ffmpeg

python - 为什么使用 Python 异步读取和调用文件中的 API 比同步慢?

c++ - 缓冲区欠载逻辑问题,线程教程?

python - 队列中的所有任务已完成,但程序未继续

python - 查询MYSQL表最有效的方法

python - 当转换为 Protobuf/C++ float 时,Python float 何时会失去精度?

如果使用getch,Python套接字recv等待发送?