Deadlock in Pythons Subprozess popen

9

Ich habe ein Problem, bei dem Popen festgefahren ist. Genauer gesagt, der Thread (nicht der Haupt-Thread), der den Popen ausführt, bleibt bei:

%Vor%

Mit ps kann ich sehen, dass der Python-Prozess sich selbst verzweigt hat, aber os.execvp noch nicht ausgeführt hat. Dies kann durch das Überprüfen von ps erkannt werden, wo ich sehe, dass es einen untergeordneten Prozess meines Hauptprozesses mit dem gleichen Namen gibt. Das Töten dieses Prozesses führt dazu, dass der festgefahrene Thread im übergeordneten Element fortgesetzt wird.

Soweit ich das beurteilen kann, wird der Child-Prozess (der execvp wird) irgendwo in den 50 Zeilen zwischen seiner Erstellung und dem Ausführen von os.execvp gesperrt. Um die Angelegenheit zu komplizieren, ist es selten; vielleicht 1 in 100 Popen. Wie kann diese Sperrung auftreten? Wie repariere ich es? (Ich kann dieses Verhalten nicht in einem einfachen Python-Programm reproduzieren).

Ich sollte beachten, dass während dieses Programm ist unglaublich Multithread (Hunderte von Threads ausgeführt), keine anderen Threads fork oder verwenden Popen. Viele andere Threads arbeiten jedoch mit Dateideskriptoren (meistens Sockets).

Technische Hinweise:

  • läuft auf Amazon EC2
  • Linux 3.0.0-14-virtuelles x86_64 in ubuntu 11.10
  • Python 2.7.2 Interpreter.
  • Verwendung mehrerer Bibliotheken einschließlich paramiko und boto
UsAaR33 11.02.2012, 04:24
quelle

1 Antwort

3

Sieht so aus, als wäre es ein kürzlich eingereichter Python 2.7.2 Bug:

Ссылка

    
UsAaR33 13.02.2012, 10:39
quelle

Tags und Links