pool.map的第二個參數想傳入多個咋整?


from functools import  partial
from multiprocessing import Pool as ThreadPool
 pageurls=[]
        if maxpage:
            for page in range(2, maxpage + 1):
                pageurl = url + '&page=%s#mSearch' % page
                pageurls.append(pageurl)
            with ThreadPool() as pool:
                   results = pool.map(partial(get_one_page,level1=level1,level2=level2,level3=level3,name=name),pageurls)



def get_one_page(pageurl,level1,level2,level3,name):
    print("正在爬取的url", pageurl)
    p_list = parser_md_index(pageurl)
    for p in p_list:
        product_url, img, p_br, p_name, p_price, old_price = p['product_url'], p['img'], p['p_br'], p[
            'p_name'], p['p_price'], p['old_price']
        product_with(level1, level2, level3, name, p_br, p_name, p_price, old_price, product_url, img)
        name = re.sub('\"', '\'',  name)
        p_name = re.sub('\"', '\'', p_name)
        sql = 'INSERT INTO modern_product (level1,level2,level3,level4,p_br,p_name,p_price,old_price,product_url,img) VALUES ("{}","{}","{}","{}","{}","{}","{}","{}","{}","{}")'.format(
            level1, level2, level3, name, p_br, p_name, p_price, old_price, product_url, img)
        cur.execute(sql)
        conn.commit()

multiprocessing 用的最多的是pool.map,類似的還有pool.map_async這個是異步的,這兩個需要傳遞的參數不同,另外python3不建議使用pool.apply了,具體我不很清楚自己查。

簡單解釋下上面代碼用的參數,其中partial是一個偏函數,關於它的用法參照(我看着挺全的):https://blog.csdn.net/appleyk/article/details/77609114

pool.map(partial(get_one_page,level1=level1,level2=level2,level3=level3,name=name),pageurls)

上面這句核心部分,在理解這句之前你需要知道什么是偏函數,什么是迭代類型參數,map是如何工作

poo.map() 傳遞的是兩個參數第一個參數是一個函數名(不帶()),第二個參數是個迭代對象。

一般情況第二個參數,傳入一個迭代就夠用了。

但是我這個就比較牛逼了,需要傳入一個列表和幾個字符串給get_one_page函數

最好使用關鍵字參數和函數的參數一一對應起來。

pool.map(partial(get_one_page,level1=level1,level2=level2,level3=level3,name=name),pageurls)的level1,level2,level3,name

get_one_page(pageurl,level1,level2,level3,name)的level1,level2,level3,name就是level1,level2,level3,name幾個參數=后面的值,為了好理解我們可以改成下面這樣。

 

pool.map(partial(get_one_page,a=level1,b=level2,c=level3,d=name),pageurls)

get_one_page(pageurl,a,b,c,d)

好了 這樣就懂了吧。

我也很菜 哪地方不對的請大家多多指點。

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM