2011-02-11 76 views
0

我想在兩個功能類似下面列出的運行兩個線程併發:Python的問題

import threading 

def functionA(): 
    for i in range(5): 
     print "Calling function A" 

def functionB(): 
    for i in range(5): 
     print "Calling function B" 

t1 = threading.Thread(functionA()) 
t2 = threading.Thread(functionB()) 

t1.start() 
t2.start() 

結果:

調用函數的 調用函數的 調用函數的 呼叫功能A 呼叫功能A 呼叫功能B 呼叫功能B 呼叫功能B 呼叫功能B 調用函數B

但不幸的是經過多次嘗試。我無法得到的結果

所期望的結果:

調用函數的 調用函數B 調用函數的 調用函數B 調用函數的 調用函數B 調用函數的 調用函數B 調用函數A

有人可以指導我,以便兩個線程可以同時併發運行併產生期望的結果。提前致謝。

回答

2

你是調用函數並將結果傳遞給Thread構造函數而不是傳遞函數。此外,您必須使用target參數(而不是先使用的未使用的group)。只需使用Thread(target=functionA)Thread(target=functionB)即可。注意函數之後缺少parens。

請注意,您仍然不會在CPython中獲得多線程,但這是一個不同的問題。

+0

感謝您的意見和幫助。 – abduls85 2011-02-11 14:55:12

1

@delnan已經回答瞭如何正確使用線程,所以我將關注你想要的輸出是什麼。

您很可能無法得到您想要的所需輸出。無法保證線程執行的時間,特別是在Python中。操作系統調度可能會影響每個線程運行的時間。當像這樣運行兩個線程時,你實際上是在說「這兩部分工作不依賴於彼此的順序並且可以同時運行」。

你可以得到的輸出是這樣的:

a,a,b,b,a,a,b,b,a,b 

或者:

a,b,b,b,b,b,a,a,a,a 

它會改變你的程序的每次執行。不要依賴線程執行的順序!

Python中的線程是一個危險的野獸。沒有兩個線程在同一時間內在Python中運行。請閱讀全球口譯鎖以瞭解更多信息。

+0

感謝您的意見和幫助。 – abduls85 2011-02-11 14:57:10

0

您正在編寫一個新線程,操作系統負責線程如何使用處理器。這就是爲什麼排序不規律。你應該使用另一個變量來定義哪個函數已經轉向。但還是一個壞主意。