多线程为什么有一个线程出错其他的就卡死??

2013-04-24 17:42:11 +08:00
 wuxiaolin
del test():
a()
b()
c()

del f():
threadPool = []
for a in b:
t = threading.Thread(target=test,args=())
threadPool.append(t)
t.start()

for t in threadPool:
t.join()

#执行其他操作



这样的形式进行多线程,每个线程分别执行test方法,test方法调用3个方法只要一个方法错误,就直接导致其他的线程也无法运行出现僵尸进程,而且#执行其他操作 那下面的代码也无法执行。这是为什么?不是应该一个线程出错也不会影响其他线程的执行么???
6651 次点击
所在节点    Python
9 条回复
zlbruce
2013-04-24 17:58:19 +08:00
因为整个进程挂了呗
所以我喜欢多进程
wuxiaolin
2013-04-24 18:07:50 +08:00
@zlbruce 怎么一个线程会影响到整个进程滴,哎,好蛋疼啊,而且进程变成僵尸进程一直卡死在那里
xdeng
2013-04-24 18:32:59 +08:00
有锁 造成死锁了
wuxiaolin
2013-04-24 18:38:52 +08:00
@xdeng 那是否在try 捕捉到错误时释放锁就可以了
xdeng
2013-04-24 18:54:33 +08:00
必须的啊~ 有锁不释放 肯定别的阻塞啊

记得给分 最近 穷
maxint64
2013-04-24 20:14:10 +08:00
@wuxiaolin 线程和进程不同,多个进程的内存空间是相互独立的,所以某个进程崩掉不影响其他进程。但同一进程下的多个线程是共享内存空间的,一个线程崩掉,其它的也活不了。
VYSE
2013-04-25 01:55:48 +08:00
Python的多线程其实就是一根筋,异常抛给Threading,它也不会给你处理还是往外抛,然后其他线程也就不可能解锁了
Zuckonit
2013-04-25 10:29:08 +08:00
同一进程的各个线程的资源是共享的, 有锁。。。
banbanchs
2013-04-25 13:14:52 +08:00

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

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

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

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

© 2021 V2EX