python多进程multiprocessing卡住问题

一:背景

在使用多进程时,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 pid

cd /proc/pid/

cat status

cat stack

在strace后,报出write(5,错误,但是代码中并没有写入文件的操作,将传递给process的queue注释掉后,代码运行正常了,经查找发现是队列中put的数量太多子进程被锁住了导致死锁。

三:解决方案

将队列中的元素写入到文件中或在 join() 之前及时取出队列中的元素。

参考链接:

Linux 使用strace命令查找进程卡死原因-CSDN博客

https://blog.csdn.net/kikilover/article/details/117710424

相关推荐

  1. python进程multiprocessing卡住问题

    2024-05-26 02:46:40       14 阅读
  2. python3 进程讲解 multiprocessing

    2024-05-26 02:46:40       18 阅读
  3. docker容器内运行python进程卡住

    2024-05-26 02:46:40       36 阅读
  4. Queue的线程爬虫和multiprocessing进程

    2024-05-26 02:46:40       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-26 02:46:40       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-26 02:46:40       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-26 02:46:40       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-26 02:46:40       20 阅读

热门阅读

  1. 19. Vue面试题汇总

    2024-05-26 02:46:40       13 阅读
  2. 分享10个国内可以使用的GPT中文网站

    2024-05-26 02:46:40       9 阅读
  3. Effective C++(2)

    2024-05-26 02:46:40       8 阅读