怎么简单的限制一个函数的运行时间? try (in n seconds) 超时就 pass

miniyao:由于在一个线程中接入了一个第三方服务,这个远程服务并不是很重要,远程调用线路和请求总有失败的可能。

因此,就想把这个函数放在 Try 中去运行:

try:

    do_something()

except:

    pass

由于每次 do_something() 会阻塞当前线程,所以想限制个最长执行时间,超时直接 pass 。

用 eventlet 有点偏重,有没有什么比较简单的实现优雅的实现方法?

imn1:远程模块一般都有 timeout 异常的

Mitt:开线程超时然后强制终止?

kangsheng9527:python 不知道,go 可以使用 context 包去处理。。。

JeffGe:新建进程超时就 kill 可行吗

dbow:这种得用协程要搞, python3 里边有 async, await, 前提是你使用的库支持这么操作.

infun:试试 retrying 库

ClericPy:线程差就差在没法外部强制停止, 所以这种场景我都是协程跑的, 外部超时直接发送 cancel 指令

至于远程调用相关的, 一般会有超时控制吧, 具体看你 do 了什么 thing 了

MoYi123:@contextmanager
def timeout_signal(second):
____signal.signal(signal.SIGALRM, raise_timeout)
____signal.alarm(second)
____try:
________yield
____finally:
________signal.signal(signal.SIGALRM, signal.SIG_IGN)

def raise_timeout(_signum, _frame):
____raise TimeoutError

def timeout(second):
____def _timeout(fun):
[email protected](fun)
________def _fun(*args, **kwargs):
____________with timeout_signal(second):
________________return fun(*args, **kwargs)

________return _fun

____return _timeout

@timeout(1)
def f():
____pass

我平时的用脚本里是这样写的,性能好坏不确定。

各位大佬,日常代码里你会主动使用 try catch 么?

myzyq:如题,日常开发中,如果处理不好,try catch 可能会让一些错误信息无法直接显现。 但是相对能保证程序继续执行下去,不会中断。 所以开发过程中,你会主动使用么?jx915:会呀,不过用的不多,一些可能影响程序执行的会,把错误打印出来就行了。 ben1024:全局捕获异常,内部方法直接抛出异常,在最外层统一处理异常输出 netnr:调接口或写接…

关于 apple trade in

ipad418855832:有部闲置 iPhone7 128g 换电池过程大力出奇迹扯断 touch id 排线,马云修理一下一百来块钱,请问这种情况可以 trade in 吗?或者大概扣多少钱?zhaidoudou123:我没记错我上次拿 7p 去换的时候检查了 Touch ID,电源键,音量键,闪光灯 sharpy:我手里的 7 几个月前换电池,就是这玩…

Java try with resource 难受

cheneydog:之前把 try 都改成了 java try with resource 形式。现在有新需求,发现无法实现,难道又要改回来? try( Handler api = getHandler() ) { // 做点啥 api.getState(); } catch ( Exception e ){ log.error("getState {} 时…

bulit-in gradle插件的版本号是多少? - java

在我的gradle构建文件中,我有以下插件块plugins { `java-library` jacoco checkstyle } 这些都没有指定版本,但是一切正常。假定一个项目正在使用gradle 6.0和gradle包装器,但是系统已安装gradle 5.0。问题:如果我运行gradle wrapper ./gradlew build,将会执行grad…

nginx proxy_pass upstream 长连接-动态变量

kokol:从 nginx 到 server 的连接是短连接,现在想设置长连接, 看网上的设置都是 keepalive,proxy_http_version 1.1,proxy_set_header Connection "" 3 个参数http { upstream BACKEND { server 192.168.0.1:8080 weight=1 ma…