python async await threading_Python threading/asyncio

多執行序範例

方法一: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() 完成後接著執行

});

資料參考:

人生美好~別浪費腦容量記程式碼 :- )

作者:CYL

出處:http://dotblogs.com.tw/cylcode

資料來源都會特別註明,有興趣都可查詢原出處,本站皆經過整理才分享,如有轉載請顯示出處及作者,感謝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值