首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gracefull python joblib杀

Gracefull python joblib杀
EN

Stack Overflow用户
提问于 2017-03-09 17:51:17
回答 1查看 2K关注 0票数 10

是否可以优雅地终止强权b进程(线程后端),而仍然返回到目前为止计算出来的结果?

代码语言:javascript
复制
parallel = Parallel(n_jobs=4, backend="threading")
result = parallel(delayed(dummy_f)(x) for x in range(100))

现在我想出了两种解决方案

  • parallel._aborted = True,它等待已启动的作业完成(在我的例子中,它可能很长)
  • 如果作业仍在管道中,则挂起的parallel._terminate_backend() (parallel._jobs不为空)

有什么方法可以绕过库来做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 06:45:48

据我所知,没有提供杀死生成线程的方法。当每个子线程在自己的上下文中运行时,实际上很难执行优雅的杀戮或终止。尽管如此,有一个解决办法是可以采用的。

模拟.join() (用于线程)功能(某种):

  1. 创建一个共享内存shared_dict,其键对应于每个线程id,如果包含线程输出或异常,则值: shared_dict = {i: in for i in range(num_workers)}
  2. 每当在任何线程中引发错误时,通过处理程序捕获异常,而不是立即引发异常,而是将其存储在共享内存标志中。
  3. 创建一个等待all(shared_dict.values())的异常处理程序
  4. 在所有值都被结果或错误填充后,通过引发错误或日志记录等方式退出程序。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42702199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档