请问一下使用 threading 创建多线程后,要怎样结束掉这些创建的多线程

2017-09-26 15:23:02 +08:00
 adjclubyb
请问一下,我用 threading 创建了几个线程去同时运行几个 cmd 的命令,但是这几个命令是不会自己结束掉的,它们一直在运行,我想做成当我输入按键事件的时候结束掉这几个线程。
例如代码这样写:

for cmd in cmds:
th = threading.Thread(target=execCmd, args=(cmd,))
th.start()
threads.append(th)
3853 次点击
所在节点    Python
9 条回复
hcnhcn012
2017-09-26 16:39:41 +08:00
最好别人工去关掉线程吧,一定要关的话可以自己写一个 stop()或者用 multiprocessing 用多进程实现任务。
写 stop 的话可以参考
https://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python
adjclubyb
2017-09-26 16:54:42 +08:00
@hcnhcn012 那如果使用 multiprocessing 呢?
geelaw
2017-09-26 17:25:25 +08:00
设置一个事件或者变量,告诉那个线程该结束了,然后等这个线程结束。

注意,杀死一个 cmd 进程不等同于杀死创建该进程的线程,后者可能会导致当前进程坏掉。
adjclubyb
2017-09-26 17:36:43 +08:00
@geelaw 我刚上手 python 不久,您能详细描述一下吗,要使用那些方法或函数?
afeicool
2017-09-26 17:48:37 +08:00
Thread.setDaemon(true)
afeicool
2017-09-26 17:50:44 +08:00
具体到你的代码就是:
th.setDaemon(True)
th.start()
hcnhcn012
2017-09-26 20:25:10 +08:00
@adjclubyb multiprocessing 是 python 内置一个多进程模块,网上有相应的教程的
impyf104
2017-09-26 22:04:45 +08:00
重写 run 和 stop,留个变量 flag
def run:
while(flag):
Do something
def stop:
flag = false
或者用 setdaemon
adjclubyb
2017-09-27 17:52:56 +08:00
@impyf104 嗯,但如果使用 setdaemon 就有个问题,我想结束掉这几个子线程之后我的主线程下面还要继续执行,程序还没结束呢?

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

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

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

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

© 2021 V2EX