问答

python – 带有’with’语句的非阻塞锁

 来源    2019-04-16    3  

据我所知,如果另一个线程已经获取了锁,则会阻止以下代码.

似乎lock.acquire(0)可以实现非阻塞,但我必须使用try-finally块而不是块.

lock = threading.Lock()

def func():
 with lock:
  # do something...

有没有任何方法可以实现非阻塞锁定获取?

Is there any method to implement non-blocking lock acquisition?

是.如果无法立即获取锁定,只需引发异常即可.就像是:

@contextlib.contextmanager
def non_blocking_lock(lock=threading.Lock()):
    if not lock.acquire(blocking=False):
        raise WouldBlockError
    try:
        yield lock
    finally:
        lock.release()

用法:

with non_blocking_lock():
    # run with the lock acquired
[Python 多线程] Lock、阻塞锁、非阻塞锁 (八)
日志 线程同步技术: 解决多个线程争抢同一个资源的情况,线程协作工作.一份数据同一时刻只能有一个线程处理. 解决线程同步的几种方法: Lock.RLock.Condition.Barrier.semaph ...
2
是否可以从Python中对Mongo进行非阻塞批量插入?
问答我必须读取网络上的一些数据,然后将其插入MongoDB.所有这些都是使用Python脚本完成的.是否有任何方法可以从Python中对Mongo进行非阻塞插入,以便在Mongo服务器处理插入时我可以继续 ...
2
在Mac OS X上使用Python生成一个新的非阻塞进程
问答我发现了一些文章,甚至堆栈问题都在解决这个问题,但我仍然无法做到. 我想要做的是从python打开一个firefox实例.然后python应用程序应该继续关注自己的业务并忽略firefox进程. 我能 ...
1
python – 为什么select()总是在非阻塞模式下被阻止
问答虽然我在非阻塞中设置套接字,但仍然阻塞了seclect()函数.请帮我. 这是我的代码: import socket import select if __name__ == '__main__': ...
1
如果在超时发生之前没有收到数据,Python的socket.recv()返回非阻塞套接字是什么?
问答基本上,我在几个地方读过socket.recv()将返回它可以读取的任何东西,或一个空字符串表示另一方已关闭(官方文档甚至没有提及它返回什么时,连接是关闭-太棒了!).这是所有罚款和dandy阻塞套接 ...
2
java – 阻止锁与非阻塞锁
问答我在这里想:如果你有2个线程执行需要同步的FAST操作,那么阻塞/上下文切换方法不是更快/更好的非阻塞方法吗? 通过非阻塞我的意思是: while(true){     if(checkAndGetT ...
2
使用带有“select”功能的非阻塞套接字有什么好处?
问答我正在Linux中编写一个服务器,它必须支持来自多个客户端的同时读/写操作.我想使用select函数来管理读/写可用性. 我不明白的是:假设我想等到套接字有可读数据.它将阻塞的选择状态的文档,直到有可 ...
1
python – Sanic框架中的非阻塞请求
问答我正在尝试Sanic并运行Hello World应用程序,除了我在请求处理程序中添加了一个睡眠: @app.route("/") async def test(request): ...
2
python – 使用web.py作为非阻塞的http服务器
问答当用python学习一些基本的编程时,我发现web.py.一世 卡住了一个愚蠢的问题: 我写了一个简单的控制台应用程序与主循环处理项目 从单独的线程中的队列.我的目标是使用web.py来添加 项目到我 ...
1
在python中将stdout设置为非阻塞
问答事先警告:出于好奇,我在这里乱砍.我没有具体的理由去做我正在做的事情! 下面是在MacOS 10.12.5上的Python 2.7.13上完成的 我正在用python进行攻击,我觉得如果我做了stdo ...
1
python – 来自http流的非阻塞读取/记录
问答我有一个客户端连接到HTTP流并记录它消耗的文本数据. 我向流服务器发送HTTP GET请求-服务器回复并不断发布数据--它将发布文本或定期发送ping(文本)消息-并且永远不会关闭连接. 我需要以非 ...
2
[Python]再学 socket 之非阻塞 Server
日志再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...
2
python 之 并发编程(非阻塞IO模型、I/O多路复用、socketserver的使用)
日志9.16 非阻塞IO模型 cpu占用率过高 服务端: from socket import * import time s = socket() s.bind(('127.0.0.1',8080)) ...
2
Verilog HDL中阻塞语句和非阻塞语句的区别
日志在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”).正确地使用这两种赋值语句对于Verilog的设计和仿真非常重要. Verilog语言中讲的阻塞赋值与非 ...
1
Python并发编程-IO模型-非阻塞IO实现SocketServer
日志Server.py import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.setblocking(False) #把soc ...
1
python第三十七天,GIL全局解释器锁*****,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
日志GIL全局解释器锁 1.什么是GIL 官方解释: ''' In CPython, the global interpreter lock, or GIL, is a mutex that preven ...
1
python – 什么条件导致打开的非阻塞命名管道(fifo)对于读取“不可用”?
问答情况: new_pipe = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK) # pipe_path points to a FIFO data = o ...
2
C fork/exec,带有非阻塞管道IO
问答这似乎是一件相当普遍的事情,而且我已经设法自学了我需要的一切,除了我现在有一个问题,这是我的故障排除. int nonBlockingPOpen(char *const argv[]){ int in ...
1
如何在python中实现非阻塞套接字服务器
问答一个类似但不同的问题: 我有一个生成字符串的IRC客户端.每当有人说某事时,这个IRC客户端使用一个钩子来调用一个方法(somone_said).我想通过套接字将此字符串发送到我的Flash客户端. ...
2