Passing multiple arguments in Python thread
The args parameter is a tuple, and allows you to pass many arguments to the target.
t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))
This is documented here:
threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
This constructor should always be called with keyword arguments. Arguments are:
group should be None; reserved for future extension when a ThreadGroup class is implemented.
target is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called.
name is the thread name. By default, a unique name is constructed of the form “Thread-N” where N is a small decimal number.
args is the argument tuple for the target invocation. Defaults to ().
kwargs is a dictionary of keyword arguments for the target invocation. Defaults to {}.
Manoj Kumar M
Updated on July 09, 2022Comments
-
Manoj Kumar M 5 monthsThe following code passes a list (varbinds) and it works fine.
t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds,))Now I need to pass another variable - vString along with this.
Please help with a simple code.
-
Manoj Kumar M about 6 yearsThanks for the explanation. But the varbinds is a list. So the comma after the variable inside parenthesis...(varBinds,). So what is the syntax to add additional variables be added after a list variable. I feel confused. -
Right leg about 6 years@Manmathan I think you are not sure what you are doing.varBindsis a list, so? Is it a list of arguments? Is it an argument whose type islist? Do you want to pass a list of arguments which containsvString? If so, just append it tovarBinds. -
Right leg about 6 years@Manmathan I presume you added that comma because you got an error and noticed that comma got you rid of it. Theargsparameter receives atuple, but when you have only one argument, you cannot write(argument), because this is parsed asargument, which is not a tuple. Therefore, you have to put a comma, so it is interpreted as a tuple:(argument, ). Since this tuple is meant to contain the arguments you pass to the thread's function, just put all the arguments in the tuple, as I wrote in the answer:(arg1, arg2, arg3, arg4). -
Right leg about 6 years@Manmathan It seems your list is actually an argument of typelist. Therefore, just write (once again, as I wrote in my answer):args=(varBinds, vString)(BTW, here the comma is optional, because there are two elements in the tuple, so Python interprets this unambiguously). -
Right leg about 6 years@Manmathan You're welcome, but think about the documentation next time ;)