可以说我有一个看起来像这样的列表:
[
[],
['blah','blah'],
['a','b'],
[],
['abc','2'],
['ff','a'],
['test','a'],
[],
['123','1'],
[]
]
Run Code Online (Sandbox Code Playgroud)
如何在遇到空项目时将此列表分解为列表列表
所以list [0]会有:
['blah','blah']
['a','b']
Run Code Online (Sandbox Code Playgroud)
列表[1]会有:
['abc','2']
['ff','a']
['test','a']
Run Code Online (Sandbox Code Playgroud) 我在列表中有一个很大的数据集,需要做一些工作。
我想在任意给定时间启动x数量的线程以在列表上工作,直到弹出该列表中的所有内容为止。
我知道如何在给定的时间(通过使用thread1 .... thread20.start())启动x数量的线程(说20个)
但是当前20个线程之一完成时,如何使它启动一个新线程?因此在任何给定时间,有20个线程在运行,直到列表为空。
我到目前为止所拥有的:
class queryData(threading.Thread):
def __init__(self,threadID):
threading.Thread.__init__(self)
self.threadID = threadID
def run(self):
global lst
#Get trade from list
trade = lst.pop()
tradeId=trade[0][1][:6]
print tradeId
thread1 = queryData(1)
thread1.start()
Run Code Online (Sandbox Code Playgroud)
更新资料
我的代码如下:
for i in range(20):
threads.append(queryData(i))
for thread in threads:
thread.start()
while len(lst)>0:
for iter,thread in enumerate(threads):
thread.join()
lock.acquire()
threads[iter] = queryData(i)
threads[iter].start()
lock.release()
Run Code Online (Sandbox Code Playgroud)
现在它从头开始启动20个线程...然后在一个线程结束时继续启动一个新线程。
但是,它效率不高,因为它等待列表中的第一个完成,然后再等待第二个..依此类推。
有更好的方法吗?
基本上我需要:
-Start 20 threads:
-While list is not empty:
-wait for 1 of the 20 threads to finish
-reuse …Run Code Online (Sandbox Code Playgroud)