在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2288|回复: 4

[求助] python调用vcs仿真

[复制链接]
发表于 2022-3-25 12:00:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x


   求助大佬:

      在做迭代测试的时候,想用Python的进程池同时跑多个case,现在情况是仿真过程中不知道该怎么终止
      原来单用vcs的时候是ctrl+c就可以了,现在运行python时按ctrl+c (1)只是停了python,显示vcs进程还有, (2)然后terminal也没有输出了,就是打命令没显示,但可以执行

      求教下怎么可以终止多个vcs,另terminal敲命令没有回显怎么解决
      万谢万谢!!!
发表于 2022-3-25 12:27:03 | 显示全部楼层
pyhton运行的时候 获得vcs那个额进程号,当python退出的时候,自动关联那个额进程号,进去kill之类的退出操作,考虑RII 如with语句
 楼主| 发表于 2022-3-25 14:17:52 | 显示全部楼层


A1985 发表于 2022-3-25 12:27
pyhton运行的时候 获得vcs那个额进程号,当python退出的时候,自动关联那个额进程号,进去kill之类的退出操 ...




   多谢多谢,能稍微详细点解释吗,比如进程号怎么获取, 我是直接pid=subprocess的 不过这样好像不好使啊, 而且python模块里的显示的只是python的进程
发表于 2022-4-2 13:57:43 | 显示全部楼层
没有尝试,不过知乎有个代码可以试一试。
https://www.zhihu.com/question/52776465/answer/1492100420
python捕获ctrl+c事件,然后再事件里把所有子进程kill掉。





  1. 作者:黄哥
  2. 链接:https://www.zhihu.com/question/52776465/answer/132004906
  3. 来源:知乎
  4. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  5. def terminate_all(self):
  6.         with self._lock:
  7.             for p in self.procs:
  8.                 if p.is_alive():
  9.                     print "Terminating %s" % p
  10.                     p.terminate()

  11.     def launch_proc(self, func, args=(), kwargs= {}):
  12.         t = threading.Thread(target=self._proc_thread_runner,
  13.                              args=(func, args, kwargs))
  14.         self._threads.append(t)
  15.         t.start()

  16.     def _proc_thread_runner(self, func, args, kwargs):
  17.         p = multiprocessing.Process(target=func, args=args, kwargs=kwargs)
  18.         self.procs.append(p)
  19.         p.start()
  20.         while p.exitcode is None:
  21.             p.join()
  22.         if p.exitcode > 0:
  23.             self.errors_flag = True
  24.             self.terminate_all()


复制代码
发表于 2022-4-2 15:15:44 | 显示全部楼层
在try: 里面执行vcs的进程调起,在except:里面执行KeyboardInterrupt的检测并执行sys.exit()和检测还在执行中的vcs进程和进程id, 在finially:里关闭所有vcs进程并打印regression的最终报告。
以上~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 16:43 , Processed in 0.020102 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表