首页 > 解决方案 > Python多线程算法无法有效工作

问题描述

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

# "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)

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

for th in threadpool:
   th.start()
   th.join()

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

我如何不确定以这种方式多线程这个算法会减少执行时间。

我的问题:

我将数据分成块并在线程中处理每个块是否正确?

我应该期望我的多线程方法显着减少运行时间吗?

有没有更好的方法来实现这个算法?

标签: pythonmultithreadingalgorithm

解决方案


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

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

for th in threadpool:
   th.start()
   th.join()

同时启动它们并等待它们的正确方法是这样的:

for th in threadpool:
   th.start()

for th in threadpool:
   th.join()

祝你好运。


推荐阅读