PythonのスレッドプールThreadPoolExecutor(A)〜(38)

前回の記事では、我々のような、Pythonのスレッド関連の知識について多くを導入している  スレッドのミューテックスをロック  /  イベントのスレッドのイベント  /  スレッド条件変数条件  などが、今日はそれにあなたを与える  スレッドプールのThreadPoolExecutor、ずっと小さくてもよいですパートナーは、モジュールがスレッドを作成することができますスレッド、不思議でしょう、ThreadPoolExecutorは、スレッドを作成し、両方のそれはどのような違いを作るんですか?

我々はすべて知っているように、プログラムスレッドは、コンピュータの最小単位であるが、スレッドの利用効率が向上しますが、同じスレッドを作成し、使用するためには、コンピュータ資源と農産物のオーバーヘッドを占有しますコンピュータがクラッシュしますと、数十スレッド生成の何千もの後、!リソースボスのように、常に少なくともお金が欲しい、ほとんどの物事の消費を最小限に抑えた、常に合理的なプログラムは、人々の最小、ほとんどの事をやってを募集します!

 

くしゃみ

私の背中の後ろに、どの2品

A.原則スレッドプール

我々は、すべての同時ダウンロード数はわずか8を開いたVIPた場合でも、サンダーのダウンロード、ダウンロードと同時に、タスクをより頻繁に1000を使用していました。あなたは1000個のスレッドを作成する場合は、最初のオーバーヘッド電卓も素晴らしいですが、唯一の8スレッドそれぞれの実行、あなたは常に作成および破棄する必要があり、それは非常に面倒になります。

スレッドプールThreadPoolExecutorは、上記問題を解決することができ、実際には、ライン上にのみ8つのスレッド、スレッドがタスクを終了したときにタスクを割り当て、各スレッド毎に、残りのタスクがキューイングされ、タスクがキューに入れることができますこのスレッドを継続する取り決め、スレッドプールThreadPoolExecutor原理と呼ばれています!

スレッドプール

 

II。ThreadPoolExecutorスレッドプールの機能紹介

1. ThreadPoolExecutorの通過構成例max_workersのパラメータは、スレッドプールで同時に実行できるスレッドの最大数を設定します。

2.使用して提出し、実行するスレッドプールのスレッドにタスク(関数名やパラメータ)を提出する機能を、そして(ファイルと同様に、描画)タスクハンドルを返し、ノート(提出)の代わりにブロックするが、すぐに戻りました。

3. 提出タスクハンドルは、関数によって返され、使用ができ行なわ()タスクを決定する方法は終了します。次の例では、タスク2Sため遅延がある、見ることができ、裁判官は、直ちに提出TASK1た後、タスク1は完了していない、と遅延4S判断した後、タスク1は完了です。

4. キャンセル()メソッドは、タスクがスレッドプールで実行されている場合は、キャンセルすることはできません、送信されたジョブをキャンセルすることができます。この場合、スレッドプールのサイズが2に設定され、タスクがすでに実行されているので、失敗キャンセル。あなたがスレッドプールのサイズを変更した場合、これは我々が正常にキャンセルできる時間で、その後、最初の提出はタスク2がまだ並んで待って、タスク1で、1です。

5.の結果()メソッドは、タスクの戻り値を取得します。注:このメソッドはブロックされます。

 

III。使用糸プールにThreadPoolExecutorのシンプル


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!USR / binに/ envをパイソン

# - * - コーディング:UTF-8 _ * -

「」」

@author:なぜ悲しみ

@Blog(個人ブログのアドレス):shuopython.com

@WeChat Official Account(微信公众号):猿说python

@Github:www.github.com

 

@File:python_threadpool.py

@Time:2019/11/29 1queue5:25

 

@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

 

from concurrent.futures import ThreadPoolExecutor

import time

 

# 参数times用来模拟下载的时间

def down_video(times):

    time.sleep(times)

    print("down video {}s finished".format(times))

    return times

 

executor = ThreadPoolExecutor(max_workers=2)

# 通过submit函数提交执行的函数到线程池中,submit函数立即返回,不阻塞

task1 = executor.submit(down_video, (3))

task2 = executor.submit(down_video, (2))

# done方法用于判定某个任务是否完成

print("任务1是否已经完成:",task1.done())

# cancel方法用于取消某个任务,该任务没有放入线程池中才能取消成功

print("取消任务2:",task2.cancel())

time.sleep(4)

print("任务1是否已经完成:",task1.done())

# result方法可以获取task的执行结果

プリントTASK1 結果

出力:

1

2

3

4

5

6

タスク1が完了している:

タスクキャンセル2

ダウンビデオ2S 終了

ダウンビデオ3S 終了

タスク1が完了している:

3

 

スレッドプールは、スペースの制限により、はるかにそれよりも使用し、スレッドプールにas_completed /マップ/ウェイト機能を、我々は次の記事に残して紹介していき~~~

 

ブロックすると、スレッド・プールに関連するプレゼンテーションの実行順序については、を参照してください PythonのスレッドプールThreadPoolExecutor(下)

 

 

 

あなたも好きなことがあります。

1.pythonスレッドキューキュー、FIFO

LifoQueue-LIFOキュー2.pythonスレッド

3.pythonのスレッドキューの優先度キューPriorityQueue-

合格4.pythonスレッドを作成し、パラメータ

5.pythonスレッドのミューテックスのロック

イベント用6.pythonスレッドイベント

 

指定してください再現猿は、Python言う  » (上)PythonのスレッドプールThreadPoolExecutorを


おすすめ

転載: blog.51cto.com/14531342/2464215