【问题标题】:Python threading error - must be an iterable, not intPython 线程错误 - 必须是可迭代的,而不是 int
【发布时间】:2018-10-01 12:50:59
【问题描述】:

我正在尝试计算数据框中第一列和其他列(第一列和第二列,第一列和第三列等)之间回归的滚动 r 平方但是当我尝试线程时,它一直告诉我错误

TypeError: * 之后的 ParallelRegression() 参数必须是可迭代的,而不是 int"。

我想知道如何解决这个问题?非常感谢!

import threading

totalThreads=3 #three different colors
def ParallelRegression(threadnum):
    for i in range(threadnum):
        res[:,i]=sm.OLS(df.iloc[:,0], df.iloc[:,i+1]).fit().rsquared
threads=[]
for threadnum in range(totalThreads):
    t=threading.Thread(target=ParallelRegression,args=(threadnum))
    threads.append(t)
    t.start()
for threadnum in range(totalThreads):
    threads[threadnum].join()

在下面链接的图片中查看数据摘要(df):

【问题讨论】:

  • args=(threadnum) 看起来可能是错字。 args 应该是一个元组吗?单元素元组需要一个尾随逗号:args=(threadnum,)

标签: python multithreading regression python-multithreading iterable


【解决方案1】:

threading.Thread 类需要一个可迭代的参数作为args 参数。您正在传递 args=(threadnum) 这是一个单一的 int 对象,您需要传递一些允许多个参数的可迭代对象,即使您只想传递一个参数。

args=[threadnum] 可以工作,因为这使得 list 可以迭代。

【讨论】:

  • 为什么要回答一些可能被认为是错字的问题,并且已经被问过无数次了? This duplicate 确实是我的第一个谷歌搜索结果,花了 5 秒钟才找到。
  • args 更改为列表可以在我的机器上运行,我希望它可以在大多数 Python 发行版/环境中运行,但我认为这是一个不应该依赖的实现细节。 Thread 的文档只说 args 是“目标调用的参数元组”。如果你给它一个元组以外的任何东西,让买家小心。
  • @Aran-Fey 为什么不呢?回答问题会皱眉吗?
  • 不赞成回答明显的重复,是的。如果您需要知道原因:因为最好将所有答案集中在一个地方。
【解决方案2】:

还有一个解决办法:在“threadnum”后面加逗号

t=threading.Thread(target=ParallelRegression,args=(threadnum,))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多