マルチスレッド、マルチプロセス
1.プロセス:
オペレーティングシステムの場合、タスクは、ブラウザを開くように、プロセス(処理)であるブラウザプロセスを開始することで、メモ帳を開くプロセスをメモ帳を開始し、2つ開き、メモ帳は、2つのノートを開始このプロセスは、開いているWordはWordのプロセスを開始しました。プロセスは、多くのリソースの集合です
2.スレッド:
スレッドとスレッドが直接独立しています。
それ自体がメインスレッドと呼ばれるスレッドを持つプロセス。
3.子スレッド
いくつかのプロセスはまた、Wordなど、同時に複数のことをやっている、同時に、印刷や他のものをスペルチェック、タイピングを行うことができます。プロセスの中で、同時にやっているより多くの事、我々は、複数の「サブタスク」を実行する必要があり、我々は、スレッド(スレッド)と呼ばれるプロセスではこれらの「サブタスク」を置きます
マルチスレッド#pythonはtheadingモジュールを使用しています
インポートスレッディング インポート要求、タイム DEFのlajfenlei(): time.sleep( 2) #のダウンロード文書2Sの 印刷(' ドライ製品' ) START_TIME = time.time() のための I におけるレンジ(10): #メインスレッド lajfenlei()#子スレッドの 印刷(time.time() - START_TIME) #メインスレッドが終了した後、子スレッドは必ずしも完全なものではありません
メインスレッドで二つの方法の制御手順を完了するために子スレッド
#第一の方法は、メインスレッドの子スレッドの待機 スレッド = [] のための I における範囲(10 ): SYY threading.Thread(目標=の= lajfenlei) syy.start() threads.append(SYY) のための T でのスレッド: t.join()
#は、無限ループに参加 のための私の中でレンジ(10 :) SYY = threading.Thread(対象= lajfenlei、) syy.start() しばらく真: IF threading.activeCount()== 1: #の子スレッドが終了し、のみ残しメインスレッド、サイクルの終わり BREAKの END_TIME = time.time() プリント(END_TIME - START_TIME)
デーモンスレッド
アナロジー:始皇帝(スレッド) - 始皇帝が死んだ後まで副葬品(デーモンスレッド)、また、副葬品とともに埋葬
インポート時、スレッド、OS のインポートのThreadPool DEF lajfenlei(): 用 I におけるレンジ(10 ): SYY threading.Thread(対象=の= lajfenlei、) syy.setDaemon(真)#のハンドルデーモンスレッドスレッドへ syy.start( ) しばらく threading.activeCount()= 1。! : パス 印刷(COUNT) を印刷(" 完成!")
ロック
インポート時、スレッド、OS のインポートのThreadPool COUNT = 0 ロック = threading.Lock() #は、ロック適用 DEF lajfenleiを(): 株式会社フリーは参加COUNTの #変更前にロックされlock.acquire()#、改変放出ロック #1 = COUNTの+を1 #lock.release()#は、ロックを解除 :ロックと COUNT + 1 = 印刷(' 乾燥生ごみを' ) のために私にレンジ(10 ): SYY = threading.Thread(対象= lajfenlei、) #1 syy.setDaemon(真)#デーモンスレッドへのサブスレッド syy.start() しばらく threading.activeCount()= 1! : 合格 プリントを(カウント) 印刷(' 完成!')
マルチスレッド、マルチコアCPUを使用できない内部#パイソン
あなたはマルチコアCPUを利用したい場合は、複数のプロセスを使用する必要があります
マルチプロセッシングモジュールを使用して、複数のプロセスでのpython
インポートマルチ インポート時間 インポートスレッドが DEF )(言う: time.sleep( 2 ) 印刷(' HHHH ' ) DEF lajfenlei() のために私に範囲(10 ): T = threading.Thread(目標= 言う) t.start( ) プリント(threading.activeCount()) プリント(' 垃圾分类' ) であれば __name__ == ' __main__ ' : についてI でのレンジ(5 ): P- = multiprocessing.Process(ターゲット= lajfenlei) p.start() 印刷(p.pid) しばらくは、 LEN(multiprocessing.active_children())= 0 :! #は、実装完了するために、子供を待つ パス 印刷を(「サブプロセスが轢か。」)
設定プロセスプール
インポートスレッドプールの インポート通し インポート要求が インポートhashlib DEF :down_load_file(URL) 、R = requests.get(URL) 、M = hashlib.md5(url.encode()) プリント(' 正在下载====%S '%m.hexdigest ()) オープンと(' %s.jpg '%のm.hexdigest()、' WB ' )FWとして: fw.write(r.content) url_list = [ ' http://www.nnzhp.cn/wp-コンテンツ/アップロード/ 2019/02 / jiami.jpeg " 、 ' Http://www.nnzhp.cn/wp-content/uploads/2019/03/js.png ' 、 " http://www.nnzhp.cn/wp-content/uploads/2018/08/ab389f04cb5b57344ef9655428bccaec.png ' ] プール = threadpool.ThreadPool(10)#は、スレッドプールスレッドプールを作成するスレッドの最大数を指定 REQS = threadpool.makeRequests(down_load_file、URL_LIST) #のパラメータを生成するために使用されるスレッドを開始するコールを #REQSにREQのための: # プール.putRequest(REQ) [pool.putRequest(REQ)用 REQ にREQS] プリント(' スレッドの現在の数' 、threading.activeCount()) pool.wait() #待機中 の印刷(「テストの終わり」)