2017-09-15 65 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()方法,但队列当前为空,它将一直等到消息变为可用时为止。您需要为每个工作线程分配一个队列,并且还需要为原始线程获取结果的第三个队列。恐怕我不会为你写代码!但是,我链接到的页面上的示例说明了如何使用该类。