python - 无响应方法调用的时间限制
问题描述
我有一个有点错误的 Python 模块。有时,函数调用会持续很长时间,甚至会出现段错误。upstrean 要解决这个问题还需要很长时间。我需要找到一种方法来运行ball()
有时间限制的方法。不幸的是,这里的建议无济于事,因为该过程没有响应。有什么提示吗?
from contextlib import contextmanager
import signal
import math
import time
from meshpy.geometry import (
EXT_OPEN,
GeometryBuilder,
generate_surface_of_revolution,
)
from meshpy.tet import MeshInfo, build
# function that takes about 1min
def ball(h):
r = 3.0
polar_subdivision = int(math.pi / h)
dphi = math.pi / polar_subdivision
def truncate(val):
return 0 if abs(val) < 1e-10 else val
rz = [
[truncate(r * math.sin(i * dphi)), r * math.cos(i * dphi)]
for i in range(polar_subdivision + 1)
]
geob = GeometryBuilder()
radial_subdivision = int(2 * math.pi / h)
geob.add_geometry(
*generate_surface_of_revolution(
rz, closure=EXT_OPEN, radial_subdiv=radial_subdivision
)
)
mesh_info = MeshInfo()
geob.set(mesh_info)
build(mesh_info)
# time.sleep(20) # works
# from <https://stackoverflow.com/a/601168/353337>
class TimeoutException(Exception):
pass
@contextmanager
def time_limiter(seconds):
def signal_handler(signum, frame):
raise TimeoutException("Timed out!")
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(seconds)
try:
yield
finally:
signal.alarm(0)
with time_limiter(3):
ball(0.02)
解决方案
推荐阅读
- arrays - 如何更新 clojure 中特定索引处的二维向量的值?
- node.js - 在 Heroku 上部署节点 js+mongo 时出错
- android - Android:如何通过无障碍服务准确知道用户是否在打字?
- python - 如何使用python在网页中提交表单?
- sql - 如何将两个 postgres 列组合为单个值(json 对象)
- mongodb - 无法连接到 MongoDB Atlas (queryTxt ETIMEOUT)
- swift - 在可重复使用的 UIViewController 中实例化内容
- apache-kafka - Kafka 到 Flink 消息处理问题
- reactjs - 当没有选项与用户搜索值匹配时 React-select 默认值
- rust - 对“Rust and WebAssembly”网站上的教程感到困惑