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()