一:背景
在使用多进程时,process.join()后面的代码并不会执行,一直卡在了第一个进程join()哪里不动。
环境:python3.8,centos7,multiprocessing库,使用mp.Queue()
二:调试过程
打印进程的pid,拿到pid后使用strace进行调试。
import os# 打印当前进程id
print(f"{os.getpid()=}")
拿到进程的id后,调试并查看子进程的状态。
# 下面两个命令多试几次,两个的输出不一样
strace -f -p pid
strace -p pidcd /proc/pid/cat statuscat stack
在strace后,报出write(5,错误,但是代码中并没有写入文件的操作,将传递给process的queue注释掉后,代码运行正常了,经查找发现是队列中put的数量太多子进程被锁住了导致死锁。
三:解决方案
将队列中的元素写入到文件中或在 join() 之前及时取出队列中的元素。
参考链接:
Linux 使用strace命令查找进程卡死原因-CSDN博客
https://blog.csdn.net/kikilover/article/details/117710424