具有一个数据集,其中每一行都需要与其他每一行结合应用加权函数(交叉连接)。是否应用该功能取决于两行中的数据,因此我不能只使用数据库。
因此,一个解决方案是在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
(这是一个示例,数字不正确)