從 QQ 到微信,表情包一直都是中國互聯網用戶的「心頭好」.
時至今日,甚至發展到了「無表情包不聊天」的地步。
無論是正事兒還是閒侃,表情包都必不可少。
聊天到一半發現表情包不夠用怎麼辦?今天帶你徹底解決這個問題!
知識點:
- requests
- css選擇器
開發環境:
- 版 本:anaconda5.2.0(python3.6.5)
- 編輯器:pycharm
第三方庫:
- requests
- parsel
進行網頁分析
目標站點.
開發者工具的使用
concurrent.futures
Python3.2帶來了 concurrent.futures 模塊,這個模塊具有線程池和進程池、管理並行編程任務、處理非確定性的執行流程、進程/線程同步等功能。
此模塊由以下部分組成:
- concurrent.futures.Executor: 這是一個虛擬基類,提供了異步執行的方法。
- submit(function, argument): 調度函數(可調用的對象)的執行,將 argument 作為參數傳入。
- map(function, argument): 將 argument 作為參數執行函數,以 異步 的方式。
- shutdown(Wait=True): 發出讓執行者釋放所有資源的信號。
- concurrent.futures.Future: 其中包括函數的異步執行。
- Future對象是submit任務(即帶有參數的functions)到executor的實例。
Executor是抽象類,可以通過子類訪問,即線程或進程的 ExecutorPools 。
因為,線程或進程的實例是依賴於資源的任務,所以最好以“池”的形式將他們組織在一起,作為可以重用的launcher或executor。
使用線程池
線程池或進程池是用於在程序中優化和簡化線程/進程的使用。
通過池,你可以提交任務給executor。
池由兩部分組成,一部分是內部的隊列,存放著待執行的任務;
另一部分是一系列的進程或線程,用於執行這些任務。
池的概念主要目的是為了重用:讓線程或進程在生命週期內可以多次使用。
它減少了創建創建線程和進程的開銷,提高了程序性能。
重用不是必須的規則,但它是程序員在應用中使用池的主要原因。
current.Futures 模塊提供了兩種 Executor 的子類,各自獨立操作一個線程池和一個進程池。
這兩個子類分別是:
- concurrent.futures.ThreadPoolExecutor(max_workers)
- max_workers 參數表示最多有多少個worker並行執行任務。
下面的示例代碼展示了線程池和進程池的功能。這裡的任務是,給一個list number_list ,包含1到10。
- 通過有5個worker的線程池執行
線程池運行
然後,我們使用了 futures.ThreadPoolExecutor 模塊的線程池跑了一次:
if name == "main":
start_time_1 = time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
for item in number_list:
executor.submit(evaluate_item, item)
print("線程池計算的時間:" + str(time.time() - start_time_1), "秒")
executor1 = concurrent.futures.ThreadPoolExecutor(max_workers=5)
for item in number_list:
executor1.submit(evaluate_item, item)
executor1.shutdown()
print("線程池計算的時間:" + str(time.time() - start_time_1), "秒")
ThreadPoolExecutor 使用線程池中的一個線程執行給定的任務。
池中一共有5個線程,每一個線程從池中取得一個任務然後執行它。
當任務執行完成,再從池中拿到另一個任務。
當所有的任務執行完成後,打印出執行用的時間:
print("線程池計算的時間:" + str(time.time() - start_time_1), "秒")
最終實現效果:
最後小編幫助大家整理了一套python教程,下面展示了部分,希望也能幫助對編程感興趣,想做數據分析,人工智能、爬蟲或者希望從事編程開發的小夥伴,畢竟python工資也還可以,如果能幫到你請點贊、點贊、點贊。
感謝看到末尾的朋友,覺得這篇文章對你有益的話,麻煩點個贊關注多多支持下!
閱讀更多 程序猿老旭 的文章