小编use*_*455的帖子

python:找到空条目时将列表分成多个部分

可以说我有一个看起来像这样的列表:

[
  [],
  ['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)

python list

3
推荐指数
1
解决办法
48
查看次数

旧线程完成后如何启动新线程?

我在列表中有一个很大的数据集,需要做一些工作。

我想在任意给定时间启动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)

python multithreading

1
推荐指数
1
解决办法
1741
查看次数

标签 统计

python ×2

list ×1

multithreading ×1