首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多线程算法工作效率不高。

Python多线程算法工作效率不高。
EN

Stack Overflow用户
提问于 2020-07-29 07:12:31
回答 1查看 45关注 0票数 0

我有一个从列表中提取数据的函数,并从这个数据中生成一个矩阵。列表长度可能有很大的大小。因此,我将数据分割成块,并将其传递给在线程中运行的函数。

代码语言:javascript
复制
# "n" is number of chunks (also number of threads)
n = 10
length = len(target_data)
s1 = 0
s2 = n
ranges = []

# this loop makes the ranges.(ex [ [0:10],[10:20],[20:30] ] ...)
for i in range(0, int(length/n)):
    if i == int(length/n)-1:
        s2 = -1
    r = [s1,s2]
    s1=s2
    s2=s1+n
    ranges.append(r)
for k in range(0, n):
    # pass main list (target_data) and target range (ranges[k]) to function in a thread
    # and then function only pick piece of list in (ranges[k]) range 
    # result_buffer is a shared list between threads to put results in this list
    t = threading.Thread(target = DataAdapter.matrix_click, args=(target_data, result_buffer, ranges[k]))
    threadpool.append(t)

然后使用以下代码启动线程:

代码语言:javascript
复制
for th in threadpool:
   th.start()
   th.join()

但是当我测量运行时间时,多线程算法仅比旧的非多线程算法快0.319637秒。另外,当我增加n的值(例如,n=10 )和测量运行时间时,它仅比旧的非多线程算法快0.21393秒!

但是,我不确定以这种方式多线程这个算法可以缩短执行时间。

我的问题:

将数据分割成块并在线程中处理每个块是正确的吗?,我应该期望我的多线程方法显著减少运行时吗?有更好的方法来实现这个算法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-29 08:40:07

在这种情况下,我不能说多线程有多有效,但是有一件事你做错了。

在您的片段中,您正在启动一个线程,等待它完成,然后启动另一个线程:

代码语言:javascript
复制
for th in threadpool:
   th.start()
   th.join()

正确的方法是同时启动它们并等待它们的出现,具体如下:

代码语言:javascript
复制
for th in threadpool:
   th.start()

for th in threadpool:
   th.join()

祝好运。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63148190

复制
相关文章

相似问题

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