请教如何通过某个'状态'来终止 Process?

2017-11-27 14:47:43 +08:00
 912305043

创建了某个进程(process1):

process1 = multiprocessing.Process(target=xx,args(xx,))

这个进程只会因为外界的某个'状态'改变而终止,请问如何实现?

2390 次点击
所在节点    Python
17 条回复
kuro1
2017-11-27 15:15:50 +08:00
signal
polythene
2017-11-27 15:21:20 +08:00
Unix signal, FIFO pipe, socket
912305043
2017-11-27 15:23:59 +08:00
感谢楼上两位,正在查资料,如果方便的话希望可以给个简单的 demo 阅读下..谢谢
oott123
2017-11-27 15:56:57 +08:00
- 这个状态是在进程内部获取的还是在外部获取的?
- 获取这个状态后,是希望外部终止进程还是进程自动退出?
seasstyle
2017-11-27 15:58:00 +08:00
test 我是黑号了?
912305043
2017-11-27 16:04:07 +08:00
@oott123
- 这个状态是在进程内部获取的还是在外部获取的?
:通过外部获取某个状态
- 获取这个状态后,是希望外部终止进程还是进程自动退出?
:关于这点,我不太清楚两者区别,对我来讲只要进程被杀掉就好了,如果方便可以解释下吗?
billwsy
2017-11-27 16:06:49 +08:00
@912305043 第二个问题是,这个进程的程序是你写的吗?
oott123
2017-11-27 16:08:36 +08:00
那就简单了

if 外部状态:
process1.terminate()

收工
912305043
2017-11-27 16:10:07 +08:00
@billwsy 是的,需要 **主程序** 负责控制这些进程的创建和销毁,通过在主程序中改变某个"状态"来达到某个进程被销毁的效果.
912305043
2017-11-27 16:12:30 +08:00
@oott123 是个比较简单的好办法,谢谢,用这个似乎就不用在通过信号来销毁进程了
billwsy
2017-11-27 16:16:34 +08:00
@912305043 我猜 process.terminate 发了 SIGTERM
billwsy
2017-11-27 16:18:26 +08:00
@912305043 啊恕我多嘴…我只是说底下还是发了 SIGTERM,不过光用并不需要了解信号…
912305043
2017-11-27 16:21:44 +08:00
@billwsy 第一次接触多线程 /多进程 编程,头很大,我明白你的意思,看了下 terminate()方法的介绍,最后还是要信号发送 SIGTERM,谢谢哈
912305043
2017-11-27 16:33:22 +08:00
@billwsy 大概是了解你第二个问题的意思了,果然还是要通过发送信号来终止,因为要在进程内获取"状态"来判断是否退出进程,外部的主程序只负责改变"状态",不关心这个进程,感谢,应该是只要如何实现了
kimmykuang
2017-11-27 16:40:45 +08:00
kill -l 查下
billwsy
2017-11-27 16:52:41 +08:00
@912305043 SIGTERM 默认的行为是结束程序,所以如果你只是想暴力的结束进程的话并不需要另外做什么,不然的话你可以在收到 SIGTERM 或者其他信号例如 SIGINT 的时候保存 /清理数据
nosugar
2017-11-27 21:15:10 +08:00
python3 多进程:处理指定个数任务,完成一个 count 一次,检测完成==总任务,后自动退出。

有需求可以看看: https://github.com/barrer/scan-helper/blob/master/scan_helper_png.py

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/409921

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX