Python-push同时从列表中弹出

时间:2017-06-25 11:18:19

标签: python

我有一个列表,当我不断地向它添加元素时,我想检查它是否为空并且同时获取元素。通常我们等待所有元素附加到列表然后我们从列表中获取元素做一些事情。在这种情况下,我们会浪费一些时间等待所有元素添加到列表中。我需要获得哪些知识才能实现这一目标(多处理,多处理。虚拟,异步),对不起,我仍然是新手,我觉得我更好地向你解释为什么我要实现这种效果,这个问题来自网络爬虫

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"""

1 个答案:

答案 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_)