1

所以我想要做的是同时多次运行同一个函数,同时将结果作为返回并将其存储在数组或列表中。它是这样的:

def base_func(matrix,arg1,arg2):
    result = []
    for row in range(matrix.shape[0]):
        #perform necessary operation on row and return a certain value to store it into result
        x = func(matrix[row],arg1,arg2)
        result.append(x)
    return np.array(result)

我尝试在 python 中使用线程。我的实现是:

def base_func(matrix,arg1,arg2):
    result = []
    threads = []
    for row in range(matrix.shape[0]):
        t = threading.Thread(target=func,args=(matrix[row],arg1,arg2,))
        threads.append(t)
        t.start()
    for t in threads:
        res = t.join()
        result.append(res)
    return np.array(result)

这似乎不起作用,只是None从线程返回。

4

1 回答 1

1

根据我在 的文档中threading.join()读到的内容,它说:

由于 join() 总是返回 None,因此您必须在 join() 之后调用 is_alive() 来确定是否发生超时——如果线程仍然处于活动状态,则 join() 调用超时。

您将始终None从这些代码行中获得:

res = t.join()
result.append(res)

这篇文章提到了与您类似的问题,请按照此解决方案。您可能希望按照此答案concurrent.futures中的说明使用模块。

于 2020-12-19T19:56:23.133 回答