多執行序範例
方法一:threading
import threading
import requests
from pyquery import PyQuery as pq
#宣告一個Threading並使用semaphore來控管執行數量( 最大值行數量 )
sema = threading.BoundedSemaphore(10)
# 定義一個函式進程
def ThreadSample( 參數1 , 參數2):
print( 參數1 , 'Start')
#放你要做的事...
print( 參數1 , 'End')
#釋出threading Semaphore信號
sema.release()
# 建立一個任務列表
ThreadTasks = []
for i in range(次數):
#獲取threading Semaphore信號
sema.acquire()
#定義threading的內容(要執行的函示進程, 其函式所需參數[用List包起來] )
thr = threading.Thread(target = ThreadSample , args = [參數1,參數2] )
#把這thread任務先記起來
ThreadTasks.append(thr)
#開始執行threading任務
thr.start()
for thr in ThreadTasks :
#用此來控管threading
thr .join()
方法二(推薦): asyncio
import asyncio
import requests
from pyquery import PyQuery as pq
#宣告一個semaphore來控管執行數量( value = 最大值行數量 )
sema = asyncio.Semaphore(value=10)
#建立一個Event Loop
loop = asyncio.get_event_loop()
# 定義一個函式進程
async def worker ( 參數1 , 參數2):
async with sema:
print( 參數1 , 'Start')
# await loop 來執行 requests
r = await loop.run_in_executor(None, requests.get, 參數2[參數1])
#放你要做的事...
print( 參數1 , 'End')
# 建立一個任務列表
tasks = [
asyncio.ensure_future( worker( 參數1 , 參數2 ))
]
#開始執行
loop.run_until_complete( asyncio.gather(*tasks) )
#也可以用這個
loop.run_until_complete( asyncio.wait(tasks) )
# await
創建一個新的「等待」命令,會確保其執行皆有回應(完成/出錯),才會再執行後續動作。可再使用.then
語法來做後續連接
只要 function 標記為 async,就表示裡頭可以撰寫 await 的同步語法
並注意,await 一定得運行在 async function 內
async function a(){
await b();
..... // 等 b() 完成後才會執行
await c();
..... // 等 c() 完成後才會執行
}
a();
a().then(()=>{
..... // 等 a() 完成後接著執行
});
資料參考:
https://kknews.cc/zh-tw/code/4vvverq.html
https://kknews.cc/code/4vvverq.html
人生美好~別浪費腦容量記程式碼 :- )
作者:CYL
出處:http://dotblogs.com.tw/cylcode
資料來源都會特別註明,有興趣都可查詢原出處,本站皆經過整理才分享,如有轉載請顯示出處及作者,感謝。