什么时候可以获得块状态设置为False的锁? - python

我想知道为什么设置block=false有意义吗?

 from multiprocessing import Process, Lock
 lock.acquire(block=False)

如果我不需要阻止,我根本就不会使用Lock?

参考方案

来自Python in a Nutshell

L.acquire()
什么时候
阻塞
是真实的,获取锁
大号
。如果
大号
已被锁定,调用线程将挂起并等待直到
大号
被解锁
然后锁
大号
。即使调用线程是最后锁定的线程
大号
,它仍然挂起并等待直到另一个线程
发布
大号
。什么时候
阻塞
是错误的
大号
解锁,获取锁
大号
并返回True。什么时候
阻塞
是错误的
大号

锁定,获取不影响
大号
,并返回False。

以及一个使用以下简单代码的实际示例:

from multiprocessing import Process, Lock, current_process


def blocking_testing(lock):
    if not lock.acquire(False):
        print('{} Couldn\'t get lock'.format(current_process().ident))
    else:
        print('{} Got lock'.format(current_process().ident))


if __name__ == '__main__':
    lock = Lock()
    for i in range(3):
        procs = []
        p = Process(target=blocking_testing, args=(lock,))
        procs.append(p)
        p.start()
        for p in procs:
            p.join()

对于上述版本(blocking=False),此输出

12206有锁
12207无法锁
12208无法锁

如果设置blocking=True(或将其删除,因为它默认为True),则主进程将挂起,因为未释放Lock
最后,如果我设置blocking=True并在末尾添加lock.release(),则输出为

12616得到了锁
12617有锁
12618有锁

我希望这是一个足够清晰的解释。

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

python-docx应该在空单元格已满时返回空单元格 - python

我试图遍历文档中的所有表并从中提取文本。作为中间步骤,我只是尝试将文本打印到控制台。我在类似的帖子中已经看过scanny提供的其他代码,但是由于某种原因,它并没有提供我正在解析的文档的预期输出可以在https://www.ontario.ca/laws/regulation/140300中找到该文档from docx import Document from…

Python ThreadPoolExecutor抑制异常 - python

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…