gpt4 book ai didi

linux - Python 的子进程 popen 中的死锁

转载 作者:IT王子 更新时间:2023-10-29 00:07:40 26 4
gpt4 key购买 nike

我遇到了 popen 死锁的问题。具体来说,运行popen的线程(不是主线程)卡在了:

File: "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File: "/usr/lib/python2.7/subprocess.py", line 1224, in _execute_child
data = _eintr_retry_call(os.read, errpipe_read, 1048576)
File: "/usr/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call
return func(*args)

用ps可以看到python进程已经fork了自己,但是还没有运行os.execvp。这可以通过检查 ps 看到,我看到我的主进程有一个同名的子进程。杀死该进程会导致父进程中卡住的线程恢复。

据我所知,子进程(将执行 execvp)在其创建和运行 os.execvp 之间的 50 行中的某处锁定。使事情复杂化的情况很少见;可能每 100 人中就有 1 人。这种锁定是如何发生的?我如何解决它? (我无法在简单的 python 程序中重现此行为)。

我应该注意到,虽然这个程序是令人难以置信的多线程(运行数百个线程),但没有其他线程派生或使用 popen。不过,许多其他线程正在使用文件描述符(主要是套接字)。

技术说明:

  • 在亚马逊 EC2 上运行
  • Ubuntu 11.10 中的 Linux 3.0.0-14-虚拟 x86_64
  • python 2.7.2 解释器。
  • 使用多个库,包括 paramiko 和 boto

最佳答案

看起来这是最近提交的 python 2.7.2 错误:

http://bugs.python.org/issue13817

关于linux - Python 的子进程 popen 中的死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com