求教各位大神,有个函数要执行正则提取,但这个函数有可能在某些情况会执行时间过长(可能是正则问题,但太复杂,无法改),这时我想有个 timeout 让它抛出错误不再执行。
在网上找了很久都是针对 Unix 用 import signal,而func-timeout包似乎不起作用,求教有没有 windows 平台下方便的解决方案?
求教各位大神,有个函数要执行正则提取,但这个函数有可能在某些情况会执行时间过长(可能是正则问题,但太复杂,无法改),这时我想有个 timeout 让它抛出错误不再执行。
在网上找了很久都是针对 Unix 用 import signal,而func-timeout包似乎不起作用,求教有没有 windows 平台下方便的解决方案?
|
ysc3839Oct 18, 2019 via Android
1
多线程,超时了强行停止?
|
|
sujin190Oct 18, 2019
3
既然函数已经繁忙于某重 cpu 事情无法返回处理其他事情,他又怎么能知道自己有没有超时呢?这本来就是互斥的,不用多线程强行 kill 没有其他方案了吧
|
|
ipwxOct 18, 2019 via Android
4
多线程也不管用吧,确定能 break 只能多进程
|
|
ipwxOct 18, 2019 via Android
5
这不是 python 的问题,所有语言都这样。能优雅地 break,必须函数内部有暂停(比如 sleep(0))。否则你只能靠 kill -9
|
|
RHxWOct 18, 2019
6
用 func_timeout 写个装饰器,我试了一下可以啊
|
|
8
|
|
ClericPyOct 18, 2019
9
多年前就有的结论(stackoverflow): 无法优雅地停止一个正在执行的线程
所以, 如果是要匹配很久, 看看是不是已经非常 CPU 密集型了, 开个进程吧, 杀起来手熟 目前就我所知没有个 async re 这类东西, 不然如果是协程, cancel 起来方便多了, 要不... 你把几百个正则拆成协程试试? 也就随时可以结束了 |
|
malusamaOct 18, 2019
10
用 celery 设置超时时间?
|