① python中一閃一閃等待用戶輸入指令的小方塊是什麼
這個小方塊是 Python 的互動式shell 表示符(prompt),通常用於等待用戶輸入指令並執行。
在Python的標准庫中,互動式shell是通過讀取 Python 解釋器的標准輸仿亮入輸出流與用戶進行交互實現的。而這個小方塊是提示符,用於告訴用戶當前 Python 解釋器正在等待輸入。
默陸擾認情況下,Python 解釋器的提示符是三個大於號(>>>)。當 Python 解釋器讀取到這個提示符時,它會等待用戶輸入Python代碼或命令。
當用戶輸入完成後,Python 解釋器會解析並執行代碼或命令,並輸出結果。如果用戶輸入的代碼或命令有語法錯誤或運行時錯誤,Python 解釋器會顯示錯誤信息,並重新備悉寬顯示提示符等待新的輸入。
② 讓Python邊等待邊執行程序
單線程就是這樣的。
你說的情況,要使用多線程來處理
③ python協程(4):asyncio
asyncio是官方提供的協程的類庫,從python3.4開始支持該模塊
async & awiat是python3.5中引入的關鍵字,使用async關鍵字可以將一個函數定義為協程函數,使用awiat關鉛扒洞鍵字可以在遇到IO的時候掛起當前協程(也就是任務),去執行其他協程。
await + 可等待的對象(協程對象、Future對象、Task對象 -> IO等待)
注意:在python3.4中是通過asyncio裝飾器定義協程,在python3.8中已經移除了asyncio裝飾器。
事件循環,可以把他當做是槐枯一個while循環,這個while循環在周期性的運行並執行一些協程(任務),在特定條件下終止循環。
loop = asyncio.get_event_loop():生成一個事件循環
loop.run_until_complete(任務):將任務放到事件循環
Tasks用於並發調度協程,通過asyncio.create_task(協程對象)的方式創建Task對象,這樣可以讓協程加入事件循環中等待被調度執行。除了使用 asyncio.create_task() 函數以外,還可以用低層級的 loop.create_task() 或 ensure_future() 函數。不建議手動實例化 Task 對象。
本質上是將協程對象封裝成task對象,並將協程立即加入事件循環,同時追蹤協程的狀態。
注意:asyncio.create_task() 函數在 Python 3.7 中被加入。在 Python 3.7 之前,可此昌以改用 asyncio.ensure_future() 函數。
下面結合async & awiat、事件循環和Task看一個示例
示例一:
*注意:python 3.7以後增加了asyncio.run(協程對象),效果等同於loop = asyncio.get_event_loop(),loop.run_until_complete(協程對象) *
示例二:
注意:asyncio.wait 源碼內部會對列表中的每個協程執行ensure_future從而封裝為Task對象,所以在和wait配合使用時task_list的值為[func(),func()] 也是可以的。
示例三:
④ Python非同步編程4:協程函數,協程對象,await關鍵字
協程函數:async def 函數名。3.5+
協程對象:執行協程函數()得到的協程蘆液御對象。
3.5之後的寫法:
3.7之後的寫法:更簡便
await後面 跟 可等待的對象。(協程對象,Future,Task對象 埋者約等於IO等待)
await實例2:串列執行。 一個協程函數裡面可以支持多個await ,雖然會串列,但是如果有其他協程函數,任務列表也在執行,依然會切換。只是案例中的main對陪岩應執行的others1和others2串列 。 await會等待對象的值得到之後才繼續往下走。
⑤ Python協程之asyncio
asyncio 是 Python 中的非同步IO庫,用來編寫並發協程,適用於IO阻塞且需要大量並發的場景,例如爬蟲、文件讀寫。
asyncio 在 Python3.4 被引入,經過幾個版本的迭代,特性、語法糖均有了不同程度的改進,這也使得不同版本的 Python 在 asyncio 的用法上各不相同,顯得有些雜亂,以前使用的時候也是本著能用就行的原則,在寫法上走了一些彎路,現在對 Python3.7+ 和 Python3.6 中 asyncio 的用法做一個梳理,以便以後能更好的使用。
協程,又稱微線程,它不被操作系統內核所管理,而完全是由程序控制,協程切換花銷小,因而有更高的性能。
協程可以比作子程序,不同的是,執行過程中協程可以掛起當前狀態,轉而執行其他協程,在適當的時候返回來接著執行,協程間的切換不需要涉及任何系統調用或任何阻塞調用,完全由協程調度器進行調度。
Python 中以 asyncio 為依賴,使用 async/await 語法進行協程的創建和使用,如下 async 語法創建一個協程函數:
在協程中除了普通函數的功能外最主要的作用就是:使用 await 語法等待另一個協程結束,這將掛起當前協程,直到另一個協程產生結果再繼續執行:
asyncio.sleep() 是 asyncio 包內置的協程函數,這里模擬耗時的IO操作,上面這個協程執行到這一句會掛起當前協程而去執行其他協程,直到sleep結束,當有多個協程任務時,這種切換會讓它們的IO操作並行處理。
注意,執行一個協程函數並不會真正的運行它,而是會返回一個協程對象,要使協程真正的運行,需要將它們加入到事件循環中運行,官方建議 asyncio 程序應當有一個主入口協程,用來管理所有其他的協程任務:
在 Python3.7+ 中,運行這個 asyncio 程序只需要一句: asyncio.run(main()) ,而在 Python3.6 中,需要手動獲取事件循環並加入協程任務:
事件循環就是一個循環隊列,對其中的協程進行調度執行,當把一個協程加入循環,這個協程創建的其他協程都會自動加入到當前事件循環中。
其實協程對象也不是直接運行,而是被封裝成一個個待執行的 Task ,大多數情況下 asyncio 會幫我們進行封裝,我們也可以提前自行封裝 Task 來獲得對協程更多的控制權,注意,封裝 Task 需要 當前線程有正在運行的事件循環 ,否則將引 RuntimeError,這也就是官方建議使用主入口協程的原因,如果在主入口協程之外創建任務就需要先手動獲取事件循環然後使用底層方法 loop.create_task() ,而在主入口協程之內是一定有正在運行的循環的。任務創建後便有了狀態,可以查看運行情況,查看結果,取消任務等:
asyncio.create_task() 是 Python3.7 加入的高層級API,在 Python3.6,需要使用低層級API asyncio.ensure_future() 來創建 Future,Future 也是一個管理協程運行狀態的對象,與 Task 沒有本質上的區別。
通常,一個含有一系列並發協程的程序寫法如下(Python3.7+):
並發運行多個協程任務的關鍵就是 asyncio.gather(*tasks) ,它接受多個協程任務並將它們加入到事件循環,所有任務都運行完成後會返回結果列表,這里我們也沒有手動封裝 Task,因為 gather 函數會自動封裝。
並發運行還有另一個方法 asyncio.wait(tasks) ,它們的區別是:
⑥ Python selenium 三種等待方式
很多人在群里問,戚櫻彎這個下拉框定位不到、那個彈出框定位不到各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加等待。殊不知,你的代碼運行速度是什麼量級的,而瀏覽器載入渲染速度又是什麼量級的,就好比閃電俠和凹凸曼約好去打怪獸,然後閃電俠打完回來之後問凹凸曼你為啥還在穿鞋沒出門?凹凸曼分分中內心一萬只羊駝飛過,欺負哥速度慢,哥不跟你玩了,拋個異常撂挑子了。
那麼怎麼才能照顧到凹凸曼緩慢的載入速度呢?只有一個辦法,那就是等嘍。說到等,又有三種等法,且聽博主一一道來:
1. 強制等待
第一種也是最簡單粗暴的一種辦法就是強制等待sleep(xx),強制讓閃電俠等xx時間,不管凹凸曼能不能跟上速度,還是已經提前到了,都必須等xx時間。
看代碼:
?
1
234
5678
# -*- coding: utf-8 -*-
from
selenium
import
webdriver
from
time
import
sleep
driver
=
webdriver.Firefox()
driver.get(
sleep(3)
# 強制等待3秒再執行下一步
print
driver.current_url
driver.quit()
這種叫強制等待,不管你瀏覽器是否載入完了,程序都得等待3秒,3秒一到,繼續頌姿執行下面的代碼,作為調試很有用,有時候也可以在代碼里這樣等待,不過不建議總用這種等待方式,太死板,嚴重影響程序執行速度。
2. 隱性等待
第二種辦法叫隱性等待,implicitly_wait(xx),隱性等待的意義是:閃電俠和凹凸曼約定好,不論閃電俠去哪兒,都要等凹凸曼高悶xx秒,如果凹凸曼在這段時間內來了,則倆人立即出發去打怪獸,如果凹凸曼在規定時間內沒到,則閃電俠自己去,那自然就等著凹凸曼給你拋異常吧。
看代碼:
?
1234567
# -*- coding: utf-8 -*-
from
selenium
import
webdriver
driver
=
webdriver.Firefox()⑦ python中用什麼等待1秒跳出循環
在Python中,你可以使用 time.sleep 函數來等待一段時間。例如,要等待1秒鍾,你可以這樣寫:
import time# 循環10次for i in range(10): print(i)
time.sleep(1) # 等待1秒鍾
上面的代碼將會列印出0到9,每次列印之間間隔1秒鍾。
另外,如果你想要在循環中跳出來,你可以使用 break 語句,例如:
import timefor i in range(10): print(i)
time.sleep(1) if i == 5: # 如果i等於5
break # 跳出循環
上面的代碼將會列印出0到5,每次列印之間間隔1秒鍾,然後跳出循環。
總之,你可以使用 time.sleep 函數來等待一段時間,並使用 break 語句來跳出循環。
⑧ Ppython await是什麼
await的解釋:
await用來聲明程序掛起。
比如非同步程序執行到某一步時需要等待的時間很長,就將此掛起,去執行其他的非同步程序。
await 後面只能跟非同步程序或有__await__屬性的對象,因為非同步程序與一般程序不同。
程序解釋:
假設有兩個非同步函數async a,async b,a中的某一步有await,
當程序碰到關鍵字await b()後,非同步程序掛起後去執行另一個非同步b程序,就是從函數內部跳出去執行其他函數,
當掛起條件消失後,不管b是否執行完,要馬上從b程序中跳出來,回到原程序執行原來的操作。
如果await後面跟的b函數不是非同步函數,那麼操作就只能等b執行完再返回,無法在b執行的過程中返回。
如果要在b執行完才返回,也就不需要用await關鍵字了,直接調用b函數就行。
所以這就需要await後面跟的是非同步函數了。
在一個非同步函數中,可以不止一次掛起,也就是可以用多個await。
更多Python知識,請關註:Python自學網!!
⑨ 請問如何在python中實現等待指定一段時間
Python的內置模塊time中有一個sleep函數,單位是秒,也可以輸入小數表示毫秒。