创建了某个进程(process1):
process1 = multiprocessing.Process(target=xx,args(xx,))
这个进程只会因为外界的某个'状态'改变而终止,请问如何实现?
1
kuro1 2017-11-27 15:15:50 +08:00 1
signal
|
2
polythene 2017-11-27 15:21:20 +08:00 1
Unix signal, FIFO pipe, socket
|
3
912305043 OP 感谢楼上两位,正在查资料,如果方便的话希望可以给个简单的 demo 阅读下..谢谢
|
4
oott123 2017-11-27 15:56:57 +08:00 1
- 这个状态是在进程内部获取的还是在外部获取的?
- 获取这个状态后,是希望外部终止进程还是进程自动退出? |
5
seasstyle 2017-11-27 15:58:00 +08:00 via iPhone
test 我是黑号了?
|
6
912305043 OP @oott123
- 这个状态是在进程内部获取的还是在外部获取的? :通过外部获取某个状态 - 获取这个状态后,是希望外部终止进程还是进程自动退出? :关于这点,我不太清楚两者区别,对我来讲只要进程被杀掉就好了,如果方便可以解释下吗? |
8
oott123 2017-11-27 16:08:36 +08:00 1
那就简单了
if 外部状态: process1.terminate() 收工 |
9
912305043 OP @billwsy 是的,需要 **主程序** 负责控制这些进程的创建和销毁,通过在主程序中改变某个"状态"来达到某个进程被销毁的效果.
|
12
billwsy 2017-11-27 16:18:26 +08:00 via iPhone 1
@912305043 啊恕我多嘴…我只是说底下还是发了 SIGTERM,不过光用并不需要了解信号…
|
13
912305043 OP @billwsy 第一次接触多线程 /多进程 编程,头很大,我明白你的意思,看了下 terminate()方法的介绍,最后还是要信号发送 SIGTERM,谢谢哈
|
14
912305043 OP @billwsy 大概是了解你第二个问题的意思了,果然还是要通过发送信号来终止,因为要在进程内获取"状态"来判断是否退出进程,外部的主程序只负责改变"状态",不关心这个进程,感谢,应该是只要如何实现了
|
15
kimmykuang 2017-11-27 16:40:45 +08:00
kill -l 查下
|
16
billwsy 2017-11-27 16:52:41 +08:00 via iPhone 1
@912305043 SIGTERM 默认的行为是结束程序,所以如果你只是想暴力的结束进程的话并不需要另外做什么,不然的话你可以在收到 SIGTERM 或者其他信号例如 SIGINT 的时候保存 /清理数据
|
17
nosugar 2017-11-27 21:15:10 +08:00
python3 多进程:处理指定个数任务,完成一个 count 一次,检测完成==总任务,后自动退出。
有需求可以看看: https://github.com/barrer/scan-helper/blob/master/scan_helper_png.py |