【发布时间】:2019-09-25 01:44:11
【问题描述】:
我是 Python 中多处理和多线程的新手,我正在尝试解决这个问题:
给定一个 n x m 矩阵,我必须将矩阵的所有元素与多处理或线程相加(我希望看到这两种解决方案)。 每个线程必须对一个变量求和 sumThreads(我不知道是否可以通过多进程来实现)。我必须使用 n 个进程/线程。
这是我迄今为止尝试过的线程
import threading
matrix = [[1, 2],[3, 4],[5, 6]]
def run(n):
for i in range(len(matrix[0])):
sumThreads += matrix[n][i]
sumThreads = 0
for i in range(len(matrix)):
t = threading.Thread(target=run, args=(i,))
t.start()
print(sumThreads)
但是我得到以下错误
UnboundLocalError: local variable 'sumThreads' referenced before assignment
如果我将run 放在启动线程的下方,它会告诉我运行未定义。
我的期望是这样的:
sumThreads = 0
matrix = [[1, 2],[3, 4],[5, 6]] #Prints 21
这里是n = 3,输出应该是21,线程/进程1添加1+2,线程/进程2添加3+4和线程/进程3添加5+6
【问题讨论】:
-
传入
sumThreads作为线程的kwarg。 -
您可以使用queue 来收集结果,该结果也可以用于多处理。
-
@MyNameIsCaleb 谢谢,我已经尝试将 sumThreads 传递给 kwarg。但是,我不知道它为什么会起作用。为什么我不能将
SumThreads作为int传递? -
为了让其他线程访问它,您必须通过 kwarg(关键字参数)将其共享给这些线程。在此之前,它对原始线程是本地的,因此对其他线程不可用。我会将其添加到下面的答案中。
-
请投票并点击旁边的复选标记以关闭此问题。
标签: python multithreading matrix multiprocessing