[10.3]スレッド間通信 - 共有変数およびキュー

1.コミュニケーションのスレッド - 共有変数

  欠点は、私たちが望むものを達成するために、共有変数をロックする必要があります

。1  !/ユーザー/ binに/ PythonのENV 
2  - * -コーディング:UTF-8 - * - 
。3  
。4  IO操作のため、パフォーマンスのマルチプロセスとマルチスレッドはほとんど差
5  Threadクラスの一例として1 
6  インポート時間
 7  インポートスレッディング
 8。 detail_url_list = []
 9。 
10  
11。 DEFのget_detail_html(detail_url_list):
 12である     。#の使用共有変数
さ13      グローバルdetail_url_list 
14      ながらTRUE:
 15          IF でlen(detail_url_list):
 16              URL =detail_url_list.pop()
 。17              記事の詳細ページをクロール
18が             印刷' 詳細HTMLを始める' 。19              time.sleep(2 20は、             印刷' GET HTMLエンドの詳細' 21で 
22で 
23れる DEF (detail_url_list)をget_detail_url:
 24      しばらく真:
 25個の         使用共用変数
26          #は、株式会社フリーはdetail_url_list参加
27件の         クロール記事一覧ページ
28          印刷URL詳細を始めます29          time.sleep(2 30          のための I における範囲(20 ):
 31              detail_url_list.append(' http://projectsedu.com/{id} ' .format(ID = i)は)
 32          プリント詳細URLの末尾を取得します' 33  
34  
35  1线程通信方式-共享变量
36  なら __name__ == ' __main__ ' 37      START_TIME = time.time()
 38      thread_detail_url = threading.Thread(目標= get_detail_url、引数=(detail_url_list))
 39      thread_detail_url.start()
 40      のための I における範囲(10 ):
 41          thread_detail_html = threading.Thread(目標= get_detail_html、引数= (detail_url_list))
 42          thread_detail_html.start()
 43  
44      プリント最後時間:{} ' .format(time.time() - START_TIME))

PS:実行しようとしないでください、私は、whileループを設定しますが、デーモンスレッドを設定しないでください。

 

キューを介してスレッド間2.通信

。1  !/ユーザー/ binに/ PythonのENV 
2  - * -コーディング:UTF-8 - * - 
3。 
4。  キューを介して、スレッド間2.通信
5。 からのキューのインポートキュー
 6。 インポート時間
 7。 インポートスレッディング
 8。 detail_url_list = []
 。9  
10  
11  DEF (キュー)get_detail_html:
 12であり、     一方、真:
 13である         #1 キューがメソッドを取得するキューが空の場合、ブロッキング、すなわち、ブロッキング機能で
14          URLを= queue.get()
 15          クロール記事詳細ページ
16          印刷' 詳細HTMLを始める' 。17          (2 time.sleepを18が         印刷' GET HTMLエンドの詳細' 19。 
20で 
21れる DEF )(キューをget_detail_url:
 22です     しばらく真:
 23です         クロールの記事一覧ページ
24          印刷詳細をGET URL開始" 25          time.sleep(2 26がある         ためにレンジ(20 :)
 27              #を内部のデータキューを挿入するために
28              ブロッキング機能は、キューがいっぱいになったとき、置かれているブロックします
29              queue.put(' http://projectsedu.com/{id} ' .format(ID = I))
 30          印刷' GET URLエンドの詳細を' 31は、 
32  
33である 1通信スレッド-変数共有
34で IF  __name__ == ' __main__ ' 35      #は、好ましくは最大、またはあまりにも多く、衝撃バックメモリに設けられた
36      detail_url_queue =キュー(MAXSIZE = 1000 37 [      START_TIMEは= (time.time)が
 38である      threading.Thread =(目標= get_detail_url、引数=のthread_detail_url(detail_url_queue))
 39      thread_detail_url.start()
 40      のための I における範囲(10 ):
 41          thread_detail_html = threading.Thread(目標= get_detail_html、引数= (detail_url_queue))
 42          thread_detail_html.start()
 43  
44      プリント最後時間:{} ' .format(time.time() - START_TIME))

 

おすすめ

転載: www.cnblogs.com/zydeboke/p/11294805.html