我不熟悉Python中的多线程和多线程处理,我正试图解决这个问题:
给定一个n矩阵,我必须用多处理或线程处理来将矩阵的所有元素求和(我希望看到这两种解决方案)。每个线程都必须与变量 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。
发布于 2019-09-25 03:00:27
您需要将共享对象sumThreads作为线程的关键字参数或kwarg传入。
t = threading.Thread(target=run, args=(i,), kwargs={'sumThreads':sumThreads})对于访问它的其他线程,您必须通过kwarg将其共享给这些线程。在此之前,它是原始线程的本地线程,因此对其他线程不可用。我将把它加到下面的答案中。
发布于 2019-09-25 03:11:00
完整的代码将是
import threading
matrix = [[1, 2],[3, 4],[5, 6]]
def run(n, **totalSum):
for i in range(len(matrix[0])):
sumThreads['sumThreads'] += matrix[n][i]
sumThreads = {"sumThreads":0}
for i in range(len(matrix)):
t = threading.Thread(target=run, args=(i,), kwargs=sumThreads)
t.start()
print(sumThreads['sumThreads']) #prints 21https://stackoverflow.com/questions/58090094
复制相似问题