我有一种情况,我必须同时读取和写入列表。 似乎代码在完成编写列表中的所有元素后开始读取。我想要做的是代码将继续在一端添加元素,我需要继续同时处理前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()
答案 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是无限流