python – 任何concurrent.futures超时实际上有效吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 任何concurrent.futures超时实际上有效吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1312字,纯文字阅读大概需要2分钟。
内容图文
![python – 任何concurrent.futures超时实际上有效吗?](/upload/InfoBanner/zyjiaocheng/782/2c6a7eb552a94781b22263829667d764.jpg)
试图以便宜的方式编写基于进程的超时(sync),如下所示:
from concurrent.futures import ProcessPoolExecutor
def call_with_timeout(func, *args, timeout=3):
with ProcessPoolExecutor(max_workers=1) as pool:
future = pool.submit(func, *args)
result = future.result(timeout=timeout)
但似乎传递给future.result的超时参数并不像宣传的那样真正起作用.
>>> t0 = time.time()
... call_with_timeout(time.sleep, 2, timeout=3)
... delta = time.time() - t0
... print('wall time:', delta)
wall time: 2.016767978668213
好.
>>> t0 = time.time()
... call_with_timeout(time.sleep, 5, timeout=3)
... delta = time.time() - t0
... print('wall time:', delta)
# TimeoutError
不行 – 5秒后解锁,而不是3秒.
相关问题显示如何使用线程池或使用signal执行此操作.如何在n秒后超时提交到池的进程,而不使用任何多处理的_private API?硬杀是好的,不需要请求干净的关机.
解决方法:
你可能想看看pebble.
它的ProcessPool旨在解决这个问题:启用超时和取消正在运行的任务,而无需关闭整个池.
当未来超时或被取消时,工作人员实际上终止有效地停止执行预定功能.
超时:
pool = pebble.ProcessPool(max_workers=1)
future = pool.schedule(func, args=args, timeout=1)
try:
future.result()
except TimeoutError:
print("Timeout")
例:
def call_with_timeout(func, *args, timeout=3):
pool = pebble.ProcessPool(max_workers=1)
with pool:
future = pool.schedule(func, args=args, timeout=timeout)
return future.result()
内容总结
以上是互联网集市为您收集整理的python – 任何concurrent.futures超时实际上有效吗?全部内容,希望文章能够帮你解决python – 任何concurrent.futures超时实际上有效吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。