Max*_*bur 7 python concurrency multithreading locking python-2.7
我们正在多线程python环境中工作,需要相互排斥的一段代码,例如:
lock = threading.Lock()
with lock:
# get data from shared storage
# process
# put back to shared storage
Run Code Online (Sandbox Code Playgroud)
目前,在我看来,二进制信号量threading.Semaphore()
和锁定threading.Lock()
将类似地用于此目的。如果我从锁定切换到二进制信号量,反之亦然,会有一些陷阱或收获吗?
注意:代码在greenthreads中运行(如果这会改变情况)
GVH*_*GVH -4
threading.Semaphore()
在内部使用一个threading.Lock()
对象作为监视器。调用时Semaphore.acquire()
,信号量对象对其 Lock 对象调用 acquire ,递减其值,然后释放锁。
由此可见,二进制信号量实际上只是锁的包装。我想不出两者之间有任何功能差异,除了使用 Semaphore 时,您可以传递可选verbose = True
参数以进行调试,并且可以选择使用 来调用 acquire blocking = False
。
归档时间: |
|
查看次数: |
4523 次 |
最近记录: |