G'afternoon。我目前有一個使用Python v2.x的循環,通過無線網卡持續檢測信息。我期望實現的是,如果例如循環檢測到一個已知數據包(通過循環內的比較方程識別),則已知數據包的值將被傳遞給另一個函數以供進一步處理(例如,以電子郵件發送給系統管理員)而原始循環在創建電子郵件時繼續同時運行。在繼續循環的同時將值輸出到另一個函數
這是否需要線程化或給定我正在使用循環,會自動繼續嗎?我假設一旦識別的值傳遞給另一個函數,循環將停止,但我不確定。
G'afternoon。我目前有一個使用Python v2.x的循環,通過無線網卡持續檢測信息。我期望實現的是,如果例如循環檢測到一個已知數據包(通過循環內的比較方程識別),則已知數據包的值將被傳遞給另一個函數以供進一步處理(例如,以電子郵件發送給系統管理員)而原始循環在創建電子郵件時繼續同時運行。在繼續循環的同時將值輸出到另一個函數
這是否需要線程化或給定我正在使用循環,會自動繼續嗎?我假設一旦識別的值傳遞給另一個函數,循環將停止,但我不確定。
(正如您所預料的那樣)這取決於您的意思是同時。如果你有一個循環
while 1:
info = get_sensor_info()
if is_important(info):
email(info)
然後循環不會停止,因爲你已經調用另一個功能!當然,作爲循環的一部分的email
將按順序執行。
也就是說,事件發生的順序看起來像:
聽起來這應該是罰款的目的。另一方面,也許電子郵件需要一段時間,並且您不想在傳感器正在編寫/發送時停止讀取傳感器。然後你需要發起一個單獨的線程/進程來完成實際的發送。
當然,您需要多線程或多處理。
for pkt in pkts:
if pkt=="known packet":
spawnNewThreadOrProcess(pkt)
doOtherStuff()
如果你沒有產生新的線程或進程,語句將按順序執行而不是同時執行。
我想補充說的是,如果您將已知數據包交給一個函數,而該函數在下面產生一個新的線程進程,那麼您顯然不需要擔心它。但重點是循環將按順序執行語句,除非產生新的執行線程或進程。