python3.x multiprocessing cycling without "if __name__ == '__main__':"
===

I have this file (it doesn't make any useful work, it's only for learning):

    import multiprocessing,sys
    def parent(numproc=2):
        print ('at start')
        childs=[]
        print ('bfore Pipe')
        (parentEnd,childEnd)=multiprocessing.Pipe()
        i=0
        print ('printing i:',i)
        child=multiprocessing.Process(target=child_proc, args=(childEnd,i))
        print ('created child')
        child.start()
        print ('started child')
        print ('joining child')
        child.join()
        print ('joined child')
        print ('exeted from for i in childs')
        mins=[1,2]
        print ('task ended. result: ',min(mins))
    def child_proc(pipe,name):
        pass
    if __name__ == '__main__':
        parent()

in this form it runs perfectly:


    at start
    bfore Pipe
    printing i: 0
    created child
    started child
    joining child
    joined child
    exeted from for i in childs
    task ended. result:  1

but if I put in end of file instead of

    if __name__ == '__main__':
        parent()

only

    parent()

it falls in cycle...

    at start
    bfore Pipe
    printing i: 0
    created child
    started child
    joining child
    at start
    bfore Pipe
    printing i: 0
    created child
    started child
    joining child
    at start
    bfore Pipe
    printing i: 0
    created child
    started child
    joining child
    Traceback (most recent call last):

Why?! What different makes this if clause?