python线程混乱代码';int';对象不可调用

python线程混乱代码';int';对象不可调用,python,mysql,multithreading,Python,Mysql,Multithreading,我知道这很混乱,但是线程太混乱了…我不知道问题是在我的sintax中还是在我使用的方法中。。。 def do insert在mysql中(在没有线程的情况下工作),另一件奇怪的事情是,在运行代码后,我注意到行被正确插入,但我仍然得到“self.\u target(*self.\u args,**self.\u kwargs) TypeError:“int”对象不可调用 您直接调用函数,然后将结果作为目标函数传递给Thread()构造函数。由于函数返回一个int,这就解释了错误;您试图使用int作

我知道这很混乱,但是线程太混乱了…我不知道问题是在我的sintax中还是在我使用的方法中。。。 def do insert在mysql中(在没有线程的情况下工作),另一件奇怪的事情是,在运行代码后,我注意到行被正确插入,但我仍然得到“self.\u target(*self.\u args,**self.\u kwargs) TypeError:“int”对象不可调用


您直接调用函数,然后将结果作为目标函数传递给
Thread()
构造函数。由于函数返回一个int,这就解释了错误;您试图使用int作为线程的入口点,而int是不可调用的

您可能打算让函数调用在另一个线程上进行。要实现这一点,请更改以下内容:

ttt = Thread(target=thistaginsert(tag))
#                   ^
# This invokes the function and uses the result as the "target" argument.
致:


正如评论中指出的,您也可以这样做:

ttt = Thread(target=thistaginsert, args=(tag,))
#                               ^ Note the lack of parens; we are passing the
#                                 function object, not calling it!

您直接调用函数,然后将结果作为目标函数传递给
Thread()
构造函数。由于函数返回一个int,这就解释了错误;您试图使用int作为线程的入口点,而int是不可调用的

您可能打算让函数调用在另一个线程上进行。要实现这一点,请更改以下内容:

ttt = Thread(target=thistaginsert(tag))
#                   ^
# This invokes the function and uses the result as the "target" argument.
致:


正如评论中指出的,您也可以这样做:

ttt = Thread(target=thistaginsert, args=(tag,))
#                               ^ Note the lack of parens; we are passing the
#                                 function object, not calling it!

不要将其包装在
lambda
中,只需传递
target=thistaginert,args=(tag,)
@abarnert,这是另一种方法。就个人而言,我觉得这更具可读性,但我会将您的添加为备选方案。我很确定核心开发人员希望
args
是一种显而易见的方法,否则他们一开始就不会费心添加它…@abarnert我并不是说它不起作用,我们可能会争论一段时间。我发现在一种有闭包的语言中,
args
关键字参数是多余的。@user3610512:请参见PEP249(DB-API 2.0规范)。大多数数据库模块提供1级或2级,而不是3级,但与其依赖“大多数数据库模块”,最好的做法是
导入任何内容;打印(whatever.threadsafety)
并查看其内容。不要将其包装在
lambda
中,只需传递
target=thistaginsert,args=(tag,)
@abarnert这是另一种方法。就个人而言,我觉得这更具可读性,但我会将您的添加为备选方案。我很确定核心开发人员希望
args
是一种显而易见的方法,否则他们一开始就不会费心添加它…@abarnert我并不是说它不起作用,我们可能会争论一段时间。我发现在一种有闭包的语言中,
args
关键字参数是多余的。@user3610512:请参见PEP249(DB-API 2.0规范)。大多数数据库模块提供1级或2级,而不是3级,但与其依赖“大多数数据库模块”,最好的做法是
导入任何内容;打印(无论如何。threadsafety)
并查看它的内容。