我一直在用穿线。穿线具体如下:
def myfunc(elt,other):
subprocess.call("A matlab script that takes a while to execute")
allThreads = []
for elt in allElts:
allThreads.append(threading.Thread(target=myfunc,args=(elt,other)))
for t in allThreads:
t.start()
for t in allThreads:
t.join()
由于数据量很大,我面临一个内存问题:我的一些订阅.呼叫引发内存问题,无法分配。为了避免这个问题,我尝试将同时执行的线程数量限制为8个。我将上述代码更改为:
someThreads = []
k = 0
for k in range(len(allElts)):
if k%8 == 1:
for t in someThreads:
t.start()
for t in someThreads:
t.join()
someThreads = []
someThreads.append(threading.Thread(target=myfunc,args=(allElts[k],other)))
else:
someThreads.append(threading.Thread(target=myfunc,args=(allElts[k],other)))
k += 1
这将创建最多8个线程并执行它们。 然而,这段代码的结果与我之前得到的结果不同,显然是错误的。怎么了?你知道吗
线程在
k%8 == 1
之前不会启动,然后一个新线程被添加到一个新的someThreads
,但不会启动。你知道吗这意味着在循环的末尾,
someThreads
中至少有一个线程没有开始调用t.start()
。你知道吗相反,使用multiprocessing ThreadPool:
相关问题 更多 >
编程相关推荐