我正在尝试在python中使用多线程。我编写了以下代码来开始。它应该并行计算列表中包含的数字的平方,并将结果返回到名为“result”的列表中。我写这个是为了并行化包含for循环的脚本。
但是,我得到一个TypeError告诉我“int对象不可调用”。我猜这是因为这行代码:thr.append(threading.Thread(target=square(k)))
:在我读过的例子中,target是一个函数。但在我的例子中,我需要使用不同的参数调用相同的函数。我怎样才能做到这一点?
>>> def square(c):
... return c^2
... result.append(c^2)
...
>>> def sqr():
... thr = []
... for k in l:
... thr.append(threading.Thread(target=square(k)))
... for t in thr:
... t.start()
... for i in thr:
... t.join()
答案 0 :(得分:5)
试试这个:
thr.append(threading.Thread(target=square, args=(k,)))
而不是thr.append(threading.Thread(target=square(k)))
您收到该错误是因为您最终在代码中调用了该函数。调用该函数时,square(k)
将返回一个不可调用的int
。
请参阅documentation。
另外,正如unutbu在问题的评论中指出的那样,你正在做一个异或而不是计算广场。方格以这种方式计算:x**2
而非x^2
。
此外,在将结果添加到列表之前返回结果,因此如果要将数字的平方添加到列表中,可能需要反转函数定义中两行的顺序,{{1 }}