2016-07-21 25 views
2

Kann mir jemand helfen zu verstehen, warum mein Code zweimal ausgeführt wird?Python-Skript wird zweimal ausgeführt

import multiprocessing 
from time import sleep 
import os, signal 

def neverEnding(): 
    while True: 
     print ' Looping ... ' 
     sleep(3) 


p = multiprocessing.Process(target=neverEnding) 
p.start() 

sleep(10) 
print p.is_alive() 

print p.pid 
p.terminate() 
print p.is_alive() 
print 'terminated?' 

os.kill(int(p.pid), signal.SIGTERM) 
print 'Now?' 
sleep(3) 
print p.is_alive() 

Dies ist die Ausgabe, die ich bekomme.

Looping ... 
Looping ... 
Looping ... 
Looping ... 
True 
8999 
True 
terminated? 
Now? 
False 
Looping ... 
Looping ... 
Looping ... 
Looping ... 
True 
9000 
True 
terminated? 
Now? 
False 

Ich bekomme 'beendet?', 'Jetzt?' usw. ... zweimal gedruckt.
Kann jemand erklären, warum das passiert?

Werden die anderen Prozesse, die im Hintergrund ausgeführt werden, dies verursachen? (Ich hatte das gleiche Skript mit Subprozess zuvor ausgeführt)

Ich benutze Ubuntu.

+0

führen Sie dieses Skript in Windows? dann siehe http://stackoverflow.com/questions/14175348/why-does-pythons-multiprocessing-module-import-main-when-starting-a-new-pro und http://stackoverflow.com/questions/20222534/ python-multiprocessing-on-windows-if-name-main – ymonad

+0

tatsächlich läuft Ihr Code in Linux druckt 'beendet?' nur einmal – ymonad

+0

Ich benutze Ubuntu, aktualisiert in Frage –

Antwort

0

Welche Python-Version verwenden Sie? Ich bin mit 2.6.9 auf Linux, den gleichen Code wie bei Ihnen, aber das unterschiedliche Ergebnis:

*Looping ... 
Looping ... 
Looping ... 
Looping ... 
True 
6634 
True 
terminated? 
Now? 
False* 

Das Problem, warum nach „p.terminate()“ der Prozess am Leben ist immer noch die Eltern zu zurückzuführen ist Prozess kann den Unterprozessstatus nicht so schnell erreichen. Wenn ich einen Schlaf (0,1) in Between:

p.terminate() 
sleep(0.1) 
print p.is_alive() 

ich folgendes Ergebnis:

Looping ... 
Looping ... 
Looping ... 
Looping ... 
True 
7046 
False 
terminated? 
Traceback (most recent call last): 
    File "./test_m.py", line 24, in <module> 
    os.kill(int(p.pid), signal.SIGTERM) 
OSError: [Errno 3] No such process 

Subprocess beendet wird, so os.kill (int (p.pid), Signal .SIGTERM) bekomme einen Fehler!

Verwandte Themen