Here you go:
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()
This will wait 10 seconds for foo and then kill it.
Update
Terminate the process only if it is running.
# If thread is active if p.is_alive(): print "foo is running... let's kill it..." # Terminate foo p.terminate()
Update 2 : Recommended
Use join with timeout. If foo finishes before timeout, then main can continue.
# 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()
foo? Is it a loop? Are you going to runfooas a different thread?foo, but otherwise see this question: stackoverflow.com/questions/492519/… or this one: stackoverflow.com/questions/4158502/…