首页 > 解决方案 > 在线程中均匀切割嵌套循环的公式是什么?

问题描述

拥有一个数据集,其中每一行都需要结合其他行应用加权函数(交叉连接)。是否应用函数取决于两行中的数据,所以我不能只使用数据库。

因此,在python中实现了一个解决方案。为了提高性能,将应用线程。

现在的问题是,在均匀分布的迭代中拆分数据集的公式是什么,所以每个线程都有几乎相同的工作。

代码的简化版本如下所述。

l = 250000  # number of rows
N = 8       # number of threads
for threadid in range(N):
    kstart = ### WHAT IS THE FORMULA TO GIVE EACH THREAD THE SAME WORK
             ### i.e. the starting index of the next thread begins after the last row of the previous thread
    klen =
    # Start thread here
    #threading.Tread(..., (kstart,klen))

def _threaded(kstart, klen):
    for k1 in range(kstart, klen):
        for k2 in range(k1, l - k1):
            # DoSomething(k1, k2)
            pass

例子:

上面显示的循环导致此迭代:

k1     | k2
0      | 0 to 249999 = 250000 iterations in inner loop
1      | 1 to 249999 = 249999 iterations in inner loop
2      | 2 to 249999 = 249998 iterations in inner loop
...
249999 | 249999 = 1 iteration in inner loop

线程 1:0 - 31249

线程 2:31250 - 62499

...

线程 8:218750 - 249999

如何更好地为 k1 分割批次,这样呢?

线程 1:0 - 10

线程 2:11 - 100

线程 3:101 - 500

线程 8:128000 - 250000

(这是一个例子,数字不正确)

标签: pythonmultithreadingloopsnestedcomplexity-theory

解决方案


推荐阅读