2017-06-25 79 views
-2

我有一個列表,並且當我不斷追加元素到它時,我想檢查它不是空的,並在同一時間獲取元素。通常我們等待所有的元素追加到列表中,然後我們從列表中獲取元素做一些事情。在這種情況下,我們會失去一些時間來等待所有元素添加到列表中。我需要獲得什麼知識才能實現這一目標(多處理,多處理虛擬,異步),對不起,我仍然是新手,因此我認爲我更好地向您解釋爲什麼我想要實現這種效果,這個問題來自一個網絡爬蟲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

請將您的代碼直接包含在您的文章中,而不是截圖。 – Delgan

+0

另外,您不一定非要使用pop(它也會從列表中刪除元素)。在python中,你可以簡單地使用list [index]語法。 – doratheexplorer0911

回答

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