2012-02-28 27 views
1

G'afternoon。我目前有一個使用Python v2.x的循環,通過無線網卡持續檢測信息。我期望實現的是,如果例如循環檢測到一個已知數據包(通過循環內的比較方程識別),則已知數據包的值將被傳遞給另一個函數以供進一步處理(例如,以電子郵件發送給系統管理員)而原始循環在創建電子郵件時繼續同時運行。在繼續循環的同時將值輸出到另一個函數

這是否需要線程化或給定我正在使用循環,會自動繼續嗎?我假設一旦識別的值傳遞給另一個函數,循環將停止,但我不確定。

回答

0

(正如您所預料的那樣)這取決於您的意思是同時。如果你有一個循環

while 1: 
    info = get_sensor_info() 
    if is_important(info): 
     email(info) 

然後循環不會停止,因爲你已經調用另一個功能!當然,作爲循環的一部分的email將按順序執行。

也就是說,事件發生的順序看起來像:

  • 獲取傳感器信息。 Then
  • 如果信息很重要,請發郵件給我。 然後
  • 再次獲取傳感器信息。 Then
  • 如果信息很重要,請發郵件給我。 然後
  • ...

聽起來這應該是罰款的目的。另一方面,也許電子郵件需要一段時間,並且您不想在傳感器正在編寫/發送時停止讀取傳感器。然後你需要發起一個單獨的線程/進程來完成實際的發送。

1

當然,您需要多線程或多處理。

for pkt in pkts: 
    if pkt=="known packet": 
     spawnNewThreadOrProcess(pkt) 
     doOtherStuff() 

如果你沒有產生新的線程或進程,語句將按順序執行而不是同時執行。

我想補充說的是,如果您將已知數據包交給一個函數,而該函數在下面產生一個新的線程進程,那麼您顯然不需要擔心它。但重點是循環將按順序執行語句,除非產生新的執行線程或進程。

相關問題