我有一个列表,当我不断地向它添加元素时,我想检查它是否为空并且同时获取元素。通常我们等待所有元素附加到列表然后我们从列表中获取元素做一些事情。在这种情况下,我们会浪费一些时间等待所有元素添加到列表中。我需要获得哪些知识才能实现这一目标(多处理,多处理。虚拟,异步),对不起,我仍然是新手,我觉得我更好地向你解释为什么我要实现这种效果,这个问题来自网络爬虫
import requests
from model import Document
def add_concrete_content(input_list):
"""input_list data structure [{'url': 'xxx', 'title': 'xxx'}...]"""
for e in input_list:
r = requests.get(e['url'])
html = r.content
e['html'] = html
return input_list
def save(input_list):
for e in input_list:
Document.create(**e)
if __name__ == '__main__':
res = add_concrete_content(list)
save(res)
"""this is I normally do, I save data to mysql or whatever database,but
I think the drawback is I have to wait all the html add to dict and then
save to database, what if I have to deal with tons of data? Can I save
the dict with the html first? Can I save some time? A friend of mine
said this is a typical producer consumer problem, probably gonna use
at least two threads and lock, because without lock, data probably
gonna fall into disorder"""
答案 0 :(得分:0)
你很模糊。而且我认为你希望事情发生的方式存在误解。
你不需要任何额外的蟒蛇岩石科学来做你想做的事情:
if list_:
(其中list_
是您的列表)list_[idx]
验证任何元素(其中idx是元素的索引)。例如,list_[0]
将为您提供列表的第一个元素,而list_[-1]
则是最后一个元素。也就是说,如果您需要在旅途中处理它们,则不必等待所有元素添加到列表中。你可能会寻找这样的东西:
def push(list_):
count = 0
while True:
list_.append(count)
f()
count += 1
if count == 1000:
break
def f():
print('First element: {}'.format(list_[0]))
print('Last element: {}'.format(list_[-1]))
if __name__ == '__main__':
list_ = []
push(list_)