python追加并同时从列表中读取

时间:2015-07-13 08:33:49

标签: python list multiprocessing

我有一种情况,我必须同时读取和写入列表。 似乎代码在完成编写列表中的所有元素后开始读取。我想要做的是代码将继续在一端添加元素,我需要继续同时处理前10个元素。

import csv

testlist=[]
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
         testlist.append(row)



def render(small)
   #do some stuff



while(len(testlist)>0)
      pool = Pool(processes=10)
      small=testlist[:10]
      del testlist[:10]
      pool.map_async(render,small)
      pool.close()
      pool.join()

2 个答案:

答案 0 :(得分:2)

您需要一个在进程之间共享的队列。一个进程添加到队列中,队列中的其他进程。

这是一个简化的例子:

from multiprocessing import Process, Queue

def put(queue):
   # writes items to the queue
   queue.put('something')

def get(queue):
   # gets item from the queue to work on
   while True:
     item = queue.get()
     # do something with item

if __name__=='__main__':
    queue = Queue()
    getter_process = Process(target=get, args=((queue),))
    getter_process.daemon = True
    getter_process.start()
    writer(queue)          # Send something to the queue  
    getter_process.join()  # Wait for the getter to finish

如果您想一次只处理10件事,可以将队列大小限制为10.这意味着," writer"如果队列已经有10个项目等待处理,则无法写入任何内容。

默认情况下,队列没有边界/限制。 documentation是一个在队列上开始更多的好地方。

答案 1 :(得分:-1)

你可以这样做

x=[]
y=[1,2,3,4,5,6,7,...]
for i in y:
    x.append(i)
    if len(x)<10:
       print x
    else:
        print x[:10]
        x=x-x[:10]

PS:假设y是无限流