Hier gehen Sie:
import multiprocessing
import time
# Your foo function
def foo(n):
for i in range(10000 * n):
print "Tick"
time.sleep(1)
if __name__ == '__main__':
# Start foo as a process
p = multiprocessing.Process(target=foo, name="Foo", args=(10,))
p.start()
# Wait 10 seconds for foo
time.sleep(10)
# Terminate foo
p.terminate()
# Cleanup
p.join()
Diese 10 Sekunden für foo
warten und es dann töten.
aktualisieren
den Prozess beenden nur, wenn er ausgeführt wird.
# If thread is active
if p.is_alive():
print "foo is running... let's kill it..."
# Terminate foo
p.terminate()
Update 2: Empfohlene
Verwenden join
mit timeout
. Wenn foo
vor dem Timeout beendet wird, kann main fortfahren.
# Wait a maximum of 10 seconds for foo
# Usage: join([timeout in seconds])
p.join(10)
# If thread is active
if p.is_alive():
print "foo is running... let's kill it..."
# Terminate foo
p.terminate()
p.join()
Was hast du in 'foo'? Ist es eine Schleife? Wirst du 'foo' als einen anderen Thread laufen lassen? – ATOzTOA
Ich würde wirklich in Betracht ziehen, 'foo' zu modifizieren, aber ansonsten diese Frage sehen: http://StackOverflow.com/questions/492519/timeout-on-a-python-function-call oder diese: http://StackOverflow.com/questions/4158502/python-kill-or-terminate-subprocess-wenn-timeout –
@ATOzTOA Es ist ein komplizierter Stück Code, der eine komplizierte Berechnung durchführt. Ich habe diesen Code nicht geschrieben. – felipa