2017-09-15 78 views
0

我想要兩個線程,那就是說thread1thread2thread1將'C++'作爲輸入,並輸出['c','+','+'],並將其放入列表中,即res; 和thread2以'python'爲輸入,並輸出['p','y','t','h','o','n'],並將其放入res。所以在處理後,res將會是[['c','+','+'],['p','y','t','h','o','n']],而不是[['p','y','t','h','o','n'],['c','+','+']]。邏輯就像下面的代碼,但我想要一個線程版本代碼。python線程來順序處理數據

train_set = [ 
    'c++', 
    'python', 
] 

def to_list(item): 
    return list(item) 

res = list(map(to_list, train_set)) 
print(res) # [['c', '+', '+'], ['p', 'y', 't', 'h', 'o', 'n']] 

回答

0
import thread 

def func(Inp, res): 
    res.append(list(Inp)) 
    return res 

train_set = ['c++', 'python'] 
result=[] 

try: 
    thread.start_new_thread(func,(train_set[0],result)) 
    thread.start_new_thread(func,(train_set[1],result)) 
except: 
    print "Error: unable to start thread" 

for i in range(20): 
    print(result) 
    pass 

但這個任務可以很容易地做到這樣:

>>> train_set = [ 
...  'c++', 
...  'python', 
... ] 
>>> res=[list(i) for i in train_set] 
>>> res 
[['c', '+', '+'], ['p', 'y', 't', 'h', 'o', 'n']] 
+0

這不能在python3.6下工作嗎? –

+0

沒有python版本的問題,執行線程的時間,我編輯了我的文章,它會運行20次,並給予足夠的時間執行兩個線程。 – Dadep

+0

@Dadep當然,'print'語句在Python 3上不起作用,所以你還沒有在那個版本上測試過。 –

1

你可能是最好關閉使用,這是專爲線程之間傳遞消息。特別是,如果您在隊列上調用get()方法,但隊列當前爲空,它將一直等到消息變爲可用時爲止。您需要爲每個工作線程分配一個隊列,並且還需要爲原始線程獲取結果的第三個隊列。恐怕我不會爲你寫代碼!但是,我鏈接到的頁面上的示例說明了如何使用該類。