非同步函數,也稱為協程,是執行過程中可以暫停和復原的函數。在 Python 中,asyncio 模組提供了一個強大的框架,用於使用協程編寫並發程式碼,協程是可以暫停和恢復的特殊函數。在本文中,我們將探討如何在 Python 中使用 asyncio 永久運行兩個非同步函數。
非同步函數
非同步函數,也稱為協程,是可以在執行過程中暫停和恢復的函數。它們允許並發執行程式碼而不阻塞主線程,從而實現系統資源的高效利用。
要在 Python 中定義非同步函數,我們在 def 語句之前使用 async 關鍵字。在非同步函數中,我們可以使用await關鍵字暫停執行並等待另一個非同步函數或協程完成。
方法1-使用asyncio模組
Python 中的 asyncio 模組提供了一個框架,用於使用協程編寫單線程並發程式碼、透過套接字和其他資源復用 I/O 存取、運行網路用戶端和伺服器以及其他相關操作。它允許我們以結構化和有組織的方式編寫非同步程式碼。文法
Here, the asyncio.get_event_loop() function is used to retrieve the current event loop or create a new one if none exists.
範例
在下面的 function1 範例中,我們有一個無限循環,它列印“Function 1”,然後使用await asyncio.sleep(1) 暫停 1 秒。同樣,function2 有一個無限循環,列印「Function 2」並暫停 2 秒。透過在主函數中呼叫 asyncio.gather(function1(), function2()),我們指示事件循環同時執行這兩個函數。 asyncio.gather 函數負責以交錯的方式調度和運行這兩個函數。當我們執行 Python 腳本時,事件循環無限期地運行,重複執行 function1 和 function2。輸出演示了這種行為,來自兩個函數的訊息根據各自的時間間隔以交錯方式列印。
import asyncio async def function1(): while True: print("Function 1") await asyncio.sleep(1) # Pause execution for 1 second async def function2(): while True: print("Function 2") await asyncio.sleep(2) # Pause execution for 2 seconds async def main(): await asyncio.gather(function1(), function2()) if __name__ == "__main__": loop = asyncio.get_event_loop() try: loop.run_until_complete(main()) finally: loop.close()
輸出
Function 1 Function 2 Function 1 Function 2 Function 1 Function 1 Function 2 Function 1 Function 1 . . .
方法1-使用執行緒
執行緒是輕量級的,允許在單一進程中並發執行多個任務。在這個方法中,我們將利用線程模組來永遠運行兩個非同步函數。
文法
thread1 = threading.Thread(target=async_function1)
範例
在下面的範例中,我們有兩個非同步函數:async_function1 和 async_function2。
async_function1 使用 time.sleep(1) 每秒列印「非同步函數 1」。
async_function2 使用 time.sleep(2) 每兩秒列印一次「Async function 2」。
我們建立兩個線程,thread1 和 thread2,分別針對 async_function1 和 async_function2。線程模組中的 Thread 類別用於建立和管理線程。然後我們使用 start() 方法啟動兩個執行緒。這會在單獨的執行緒中啟動非同步函數的執行,從而允許它們同時運行。
import threading import time def async_function1(): while True: print("Async function 1") time.sleep(1) def async_function2(): while True: print("Async function 2") time.sleep(2) thread1 = threading.Thread(target=async_function1) thread2 = threading.Thread(target=async_function2) thread1.start() thread2.start() while True: pass
輸出
此範例的輸出將連續每秒列印“Async function 1”,每兩秒列印“Async function 2”。程式碼啟動兩個線程,每個線程執行其各自的非同步函數。主執行緒透過無限迴圈保持活動狀態,以允許其他執行緒無限期地運行。
Async function 1 Async function 1 Async function 2 Async function 1 Async function 1 Async function 2 Async function 1 Async function 1 Async function 2
方法 3 - 使用子流程
子進程是可以在 Python 程式中建立和管理的獨立進程。在這個方法中,我們將使用 subprocess 模組來永遠運行兩個非同步函數。
文法
subprocess.Popen(args, bufsize=-1, executable=None)
這裡,
args(必要):此參數指定要執行的指令。它可以是一個字串或字串序列。
bufsize:此參數表示用於 I/O 作業的緩衝區大小。預設值為-1,表示使用系統預設緩衝區大小。
bufsize:此參數表示用於 I/O 作業的緩衝區大小。預設值為-1,表示使用系統預設緩衝區大小。
範例
在此範例中,我們有兩個相同的非同步函數:async_function1 和 async_function2。
async_function1 使用 time.sleep(1) 每秒列印「非同步函數 1」。
async_function2 使用 time.sleep(2) 每兩秒列印一次「Async function 2」。
我們使用 subprocess 模組中的 subprocess.Popen 類別來建立子進程,而不是執行緒。每個子進程都是透過執行運行相應非同步函數的單獨 Python 進程來創建的。子進程是使用 subprocess.Popen 建構子建立的,我們傳遞 Python 命令來執行所需的函數。例如,['python', '-c', 'from module import async_function1; async_function1()'] 從單獨的 Python 程序執行 async_function1。
import subprocess import time def async_function1(): while True: print("Async function 1") time.sleep(1) def async_function2(): while True: print("Async function 2") time.sleep(2) subprocess1 = subprocess.Popen(['python', '-c', 'from module import async_function1; async_function1()']) subprocess2 = subprocess.Popen(['python', '-c', 'from module import async_function2; async_function2()']) while True: pass
輸出
此範例的輸出將連續每秒列印“Async function 1”,每兩秒列印“Async function 2”。該程式碼建立兩個子進程,每個子進程執行其各自的非同步函數。主進程透過無限循環保持活動狀態,以允許子進程無限期地運行。
Async function 1 Async function 1 Async function 2 Async function 1 Async function 1 Async function 2 Async function 1 Async function 1 Async function 2
结论
在本文中,我们讨论了如何使用 Python 中的 asyncio 模块在 Python 中永久运行两个异步函数。使用 asyncio 进行异步编程为编写高性能和响应式 Python 应用程序开辟了新的可能性。通过利用异步函数和事件循环,您可以利用并发的力量并有效地管理多个任务。
以上是如何在Python中永遠運行兩個非同步函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python的靈活性體現在多範式支持和動態類型系統,易用性則源於語法簡潔和豐富的標準庫。 1.靈活性:支持面向對象、函數式和過程式編程,動態類型系統提高開發效率。 2.易用性:語法接近自然語言,標準庫涵蓋廣泛功能,簡化開發過程。

Python因其簡潔與強大而備受青睞,適用於從初學者到高級開發者的各種需求。其多功能性體現在:1)易學易用,語法簡單;2)豐富的庫和框架,如NumPy、Pandas等;3)跨平台支持,可在多種操作系統上運行;4)適合腳本和自動化任務,提升工作效率。

可以,在每天花費兩個小時的時間內學會Python。 1.制定合理的學習計劃,2.選擇合適的學習資源,3.通過實踐鞏固所學知識,這些步驟能幫助你在短時間內掌握Python。

Python適合快速開發和數據處理,而C 適合高性能和底層控制。 1)Python易用,語法簡潔,適用於數據科學和Web開發。 2)C 性能高,控制精確,常用於遊戲和系統編程。

學習Python所需時間因人而異,主要受之前的編程經驗、學習動機、學習資源和方法及學習節奏的影響。設定現實的學習目標並通過實踐項目學習效果最佳。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)