マルチスレッドと同じくらいのPythonプロセス

プロセスは、リソースの集合です

スレッドには、内の特定のワークプロセスであります

スレッドとスレッド間の相互に独立しています

マルチスレッド:IO集約的なタスクについて

マルチプロセス:CPU集約型のタスクのための

まず、マルチスレッド

スレッドがthreadingモジュールを使用する必要があります

スレッド開始方法:

引数=(「XXX」、ように書くことにする唯一の1つのパラメータが存在する場合threading.Thread(対象= XXX、引数=(「XXX」、「xxxは」))関数の名前を取る#target、引数のパラメータは、その後、渡されます)

スレッドのうちの子スレッドですthreading.Threadの例では、一つのスレッドだけまずアップがメインスレッドです

シンプルなマルチスレッドを書きます

スレッドインポート

DEFのdown_load():
    time.sleep(1 
    プリント(' オーバー実行' 

用の I におけるレンジ(5 ):#5サイクル、すなわち、5つのスタートスレッド
    T threading.Threadの=(目標= down_load)例#スレッドの
    t.start()#スレッド開始

プリント(threading.active_count())#表示現在の行プロセスの数
印刷(threading.current_thread())#表示現在のスレッドを

私は今待つスレッドを伴う、取引の実行を開始参加するために、スレッドが待っている、使用jionは多くの問題になり、すべてのスレッドを見たい場合は、ハンドルにwhileループ方式を使用することができます。

スレッディングインポート
インポート時間

DEFのdown_load():
    (time.sleep 。1 
    (印刷' 轢か' 

START_TIME = time.time()
 のための I におけるレンジ(5 ):#5サイクル、すなわち、5つのスタートスレッド
    T =スレッディング.thread(ターゲット= down_load)#インスタンス化スレッド
    t.start()#開始スレッド
 threading.active_count()!= 1 :、#1スレッドの数に等しくされていないがサイクルとなっている分析サイクルの終了まで、1に等しい
    パス
を印刷(threading.active_countは())#は、スレッドの現在の数を表示し
、印刷(threading.current_thread())#現在のスレッドのチェック

END_TIMEを = time.time() 印刷"時間:"、END_TIME-START_TIME)

例:

それぞれシングルおよびマルチスレッド実行と画像をダウンロードするための時間を見て2つの方法があります。

mport要求、時間、スレッド
 から hashlibのインポートMD5
 DEF :down_load_pic(URL)
    REQ = requests.get(URL)
    、M = MD5(url.encode())
    オープン(m.hexdigest()と + ' の.png '' WB ' )FWとして:
        fw.write(req.content)

url_list = [ ' http://www.nnzhp.cn/wp-content/uploads/2019/10/f410afea8b23fa401505a1449a41a133.png ' ' HTTP://www.nnzhp .CN / WP-コンテンツ/アップロード/ 11分の2019 / 481b5135e75c764b32b224c5650a8df5.png "' Http://www.nnzhp.cn/wp-content/uploads/2019/11/b23755cdea210cfec903333c5cce6895.png ' " http://www.nnzhp.cn/wp-content/uploads/2019/11/542824dd​​e1dbd29ec61ad5ea867ef245。 PNG " ] 

シリアル・ダウンロード・オペレーション(シングルスレッド)START_TIME time.time =() URL_LISTでのURLのために:     down_load_pic(URL) END_TIME time.time =() 
#の印刷(END_TIME-START_TIME)


#1 パラレル方法(マルチスレッド) 
START_TIME = time.time()
 のための URL URL_LIST:
    Tthreading.Thread =(対象= down_load_pic、引数=(URL))  そう書かれる唯一つのパラメータ(URL)
    t.start()
    
しばらく threading.activeCount()= 1! パス

END_TIME = time.time()
 印刷(END_TIME-START_TIME)
  • スレッドプール

ピップは、スレッドプールをインストールします、それを手動でインストールする必要がスレッドプールスレッドプールのモジュールを使用する必要があります

スレッドプールは、自動的にデータの分布を計算することができ、我々は手動で起動する必要はありません、または一例として、画像をダウンロードするには:

インポートスレッドプール
 インポート要求、時間、スレッド
 から hashlibのインポートMD5
 DEF down_load_pic(URL):
    REQ = requests.get(URL)
    、M = MD5(url.encode())
    オープンと(m.hexdigest() + ' .PNG '' WB ' FWとして):
        fw.write(req.content)

url_list = [ ' http://www.nnzhp.cn/wp-content/uploads/2019/10/f410afea8b23fa401505a1449a41a133.png ' 'http://www.nnzhp.cn/wp-content/uploads/2019/11/481b5135e75c764b32b224c5650a8df5.png ' ' http://www.nnzhp.cn/wp-content/uploads/2019/11/b23755cdea210cfec903333c5cce6895.png " ' http://www.nnzhp.cn/wp-content/uploads/2019/11/542824dd​​e1dbd29ec61ad5ea867ef245.png ' ] 
プール = threadpool.ThreadPool(20)とスレッドプールインスタンス 
REQSを= threadpool.makeRequests(down_load_pic、url_list )#の割り当てデータを、最初は、関数名、第二のデータである#コードの次の2行で、式をリスト[REQSにREQためpool.putRequest(REQ)] のため REQ :REQS 
    pool.putRequest(REQ )
pool.wait() 


    彼らは完成し、印刷が実行された端部を有するまで、エンド・印刷するために待機するしない場合、待って
印刷を終了
  • デーモンスレッド

デーモンスレッドはメインスレッドに依存して、メインスレッドが終了すると、デーモンスレッドがすぐに終了します。

インポートスレッディング、タイム

DEFのdown_load():
    time.sleep( 1。 印刷' 轢か' 

のために I レンジ(5。 ):
    T = threading.Threadの(対象= down_load)
    t.setDaemon(真)#のセット子スレッドデーモンスレッド
    t.start()

印刷オーバー
  • スレッドロック

同じ時間のデータを操作する複数のスレッドは、我々はロックする必要があります、

インポートスレッディング

NUM = 0 
ロック = threading.Lock() ロック適用

DEF 追加を():
     株式会社フリーは参加NUMの
     lock.acquire()#ロック
    NUM + = 1 
    ロックされていない場合lock.release()#アンロックをロック解除後にデッドロックしません

    :ロックで#1 、速記を自動ロックでのお手伝いをします、ロック解除 
        NUM + = 1 
のための I におけるレンジ(10 ): T = threading.Thread(ターゲット= 追加) t.start( ) しばらく threading.activeCount()= 1。! パス 印刷' オーバー:'、A)

第二に、マルチプロセス

モジュールマルチプロセッシング処理用途

インポートは、マルチプロセッシング、時間

DEFは)(down_load:
    time.sleepは、( 1 印刷轢か

のIF  __name__ == __main__ 窓の下には、それ以外の場合はエラーになり、メインで複数のプロセスを記述する必要が、Macは必要としない

    ために範囲(5 :)
        のp- = multiprocessing.Process(ターゲット= down_load) プロセスの一例
        p.start()

    しながら、 lenは(multiprocessing.active_children())!= 0:
         パス
    印刷(multiprocessing.current_process()) 現在のプロセスに見る
    のCPU#ビューの数を印刷(multiprocessing.cpu_countを())
    を印刷終了

 

おすすめ

転載: www.cnblogs.com/tata-learning/p/11886563.html