9

I'm currently trying to figure out how threads work in python.

I have the following code:

def func1(arg1, arg2):

    print current_thread()
    ....

class class1:

    def __init__():
        ....

    def func_call():
        print current_thread()
        t1 = threading.Thread(func1(arg1, arg2))
        t1.start()
        t1.join()

What I noticed is that both prints output the same thing. Why is the thread not changing?

2 Answers 2

20

You're executing the function instead of passing it. Try this instead:

t1 = threading.Thread(target = func1, args = (arg1, arg2))
Sign up to request clarification or add additional context in comments.

Comments

8

You are calling the function before it is given to the Thread constructor. Also, you are giving it as the wrong argument (the first positional argument to the Thread constructor is the group). Assuming func1 returns None what you are doing is equivalent to calling threading.Thread(None) or threading.Thread(). This is explained in more detail in the threading docs.

To make your code work try this:

t1 = threading.Thread(target=func1, args=(arg1, arg2))
t1.start()
t1.join()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.