首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中具有多线程/多线程处理的矩阵和元素

Python中具有多线程/多线程处理的矩阵和元素
EN

Stack Overflow用户
提问于 2019-09-25 01:44:11
回答 2查看 598关注 0票数 1

我不熟悉Python中的多线程和多线程处理,我正试图解决这个问题:

给定一个n矩阵,我必须用多处理或线程处理来将矩阵的所有元素求和(我希望看到这两种解决方案)。每个线程都必须与变量 sumThreads相加(我不知道是否可以使用多进程实现这一点)。我必须使用n个进程/线程。

这就是到目前为止我尝试过的线程

代码语言:javascript
复制
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放在启动线程的下面,它会告诉我没有定义运行。

我所期望的是:

代码语言:javascript
复制
sumThreads = 0

matrix = [[1, 2],[3, 4],[5, 6]] #Prints 21

这里的n = 3和输出应该是21,其中线程/进程1添加1+2,线程/进程2添加3+4,线程/进程3添加5+6

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-25 03:00:27

您需要将共享对象sumThreads作为线程的关键字参数或kwarg传入。

代码语言:javascript
复制
t = threading.Thread(target=run, args=(i,), kwargs={'sumThreads':sumThreads})

对于访问它的其他线程,您必须通过kwarg将其共享给这些线程。在此之前,它是原始线程的本地线程,因此对其他线程不可用。我将把它加到下面的答案中。

票数 0
EN

Stack Overflow用户

发布于 2019-09-25 03:11:00

完整的代码将是

代码语言:javascript
复制
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 21
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58090094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档