2017-02-03 13 views
1

(urllibを使用して)リンクからデータを取得し、それを順番に印刷しようとしました(最初のリンクのデータ、2番目のリンクのデータ..)もちろん、うまく動作し、正しい順序で印刷するスレッドはありませんが、スレッディングでそれを行うと、順序が中断され、修正方法がわかりませんでした ここに私のコードです:ありがとう!!スレッドモジュールのスレッド関数の値を表示するには、print/append

def with_threading(): 
    def run(num, q): 
     q.put(urllib2.urlopen("%s" % str(num)).read()) 

    start_time = time.time() 
    q = Queue.Queue() 
    movies_names_list = [] 

    threads_list = [threading.Thread(target=run, args=(i, q)) for i in xrange(1, 33)] 

    for thread in threads_list: 
     thread.start() 

    for thread in threads_list: 
     thread.join() 

    for i in xrange(1, 33): 
     movies_names_list.append(q.get()) 

    print movies_names_list 
    print "\nElapsed Time: %s" % (time.time() - start_time) 

答えて

1

あなたはキューに入れる前に、追加のインデックスに各ムービーをマークすることによって、それを達成して、結果をソートすることができます

def with_threading(): 
    def run(num, q): 
     q.put(((urllib2.urlopen("%s" % str(num)).read()), num)) 

    start_time = time.time() 
    q = Queue.Queue() 
    movies_names_list = [] 

    threads_list = [threading.Thread(target=run, args=(i, q)) for i in xrange(1, 33)] 

    for thread in threads_list: 
     thread.start() 

    for thread in threads_list: 
     thread.join() 

    for i in xrange(1, 33): 
     movies_names_list.append(q.get()) 

    res = sorted(movies_names_list, key=lambda tup: tup[1]) 
    res = [item[0] for item in res] 
    print res 
    print "\nElapsed Time: %s" % (time.time() - start_time) 
+0

ありがとうございました!! :)) – Eden

関連する問題