我需要我的程序並行地執行某個函數。但是該功能根據用戶與程序的交互方式分支出不同的結果。我在一個名爲threadGUI.py的模塊中有一個簡單的GUI,它有兩個選項:下載和上傳。這些選項創建包含與該函數相關的變量的字典。這些字典存儲在存儲在thread_test.py模塊中的主字典中。當一個接一個地執行時,這些工作正常,但是當我嘗試並行執行時出現錯誤。在threadGUI.py 穿線相關的代碼:在Python中爲不同的結果執行相同的函數
def OnStartClick(self):
for i in thread_test.dictList.values(): #the main dictionary is stored as a global in thread_test.py
thread = Thread(target = thread_test.begin_tests, args = (i,))
thread.start()
print "thread finished...exiting"
上述函數調用thread_test.py模塊內的begin_test功能。功能如下:
def begin_tests(arg):
print arg
print dictList
dictItem = arg
print dictItem
if dictItem['Type'] == "HTTP_Downloading":
print "DOWNLOAD"
elif dictItem['Type'] == "FTP_Uploading":
print "UPLOAD"
else:
print "Invalid input"
sys.exit(1)
這是我的代碼的簡化示例。我的問題是,我的代碼只執行兩個而不是兩個函數中的一個函數。所以如果我創建了一個名爲下載,上傳,下載的字典,它會執行三次下載,而不是所需的模式。
在發佈我的問題後,我很快意識到這一點,所以您的猜測是正確的。儘管如此,我目前不知道如何去解決問題。一旦下一個線程啓動,它就會覆蓋dictItem並導致以前正在進行的線程中的錯誤。 有什麼辦法可以修復一個全局變量到那個特定的線程而不是影響所有的線程? – Joe
隊列聽起來不錯,但是這個程序現在已經不能切換了。也許如果我有時間來優化代碼,我可以給他們一個去。 事實證明,我太亂了全局變量,我發現本地線程存儲解決了我的問題。無論如何感謝您的幫助,它幫助我縮小了問題的範圍! – Joe