前回のプロセス少し知識、人気の理解は、このプロセスはOSにああして各プログラムを「監視対象」であることをプロセスに、少なくとも、リソースのスケジューリング割り当ての基本単位のためのオペレーティングシステム(OS)である。そして、周りのマルチプロセス、もちろん、メッセージキュー、このプロセスプールを介してメインプロセスの守護者、...探求と共有グローバル変数、偏ったアプリケーション、複数のタスクのローカル処理が時折も自分自身を動作しますが、複数のプロセスを取得するために優先順位を(主に会社のコンピュータ泥棒強い、私はマルチプロセスを取得するつもりです、それは資源の無駄である必要ハハ...)。
処理し、自分の手書きはいけないし、それを、(scrapyがマルチスレッドのために有用である前に、爬虫類を除く)は、基本的に、使用されることはありません。私たちのほとんどはPythonインタプリタが使用しているので、なぜ、それを処理するために優先順位を与えることを好むだろうCPythonの。それは、デフォルトでは、実際には、我々が設定したブロック、および1つは、マルチスレッドで達成することが本当にできない事実CPythonの中でマルチスレッド ..私は話すことはありません...
しかし、また、人気のある言葉を理解する、という観点からプロセス(プログラム)は、少なくとも一つのプロセスが存在するプロセスおよびスレッドは、それが1として見ることができる:nの関係。
OSスケジューリング、複数のプロセス、複数のスレッドで各「量」の関係があることが理解されます。
シングルスレッド
、コードの観点から順に実行されるコードの一部は、単一プロセスです。
import time
# 我每天下班之后首先是: 煮饭, 做菜
def cook_rice():
for i in range(3):
print(f"cook rice ...{i}")
time.sleep(1)
def cook_dishes():
for i in range(4):
print(f"cook dishes...{i}")
time.sleep(0.5)
if __name__ == '__main__':
cook_rice()
cook_dishes()
cook rice ...0
cook rice ...1
cook rice ...2
cook dishes...0
cook dishes...1
cook dishes...2
cook dishes...3
これは真実がさ?真実はこの事で、まず、調理、その後、調理する。我々は何の問題も欲しい結果である...しかし、私は最初、私がするために着手したものをいくつかの音楽に乗せて、コンピュータの電源を入れ、米プラグイン野菜、野菜これらの事。
可視本当にそれはまた、マルチタスクが以前の生活の視点から、それを言及している、これは非常に自然なことです。このプログラムのために調理し、私は実際に同時に行うことができるということである。そして、私は常にポイントはつまり書き込みコード本質的には、現実とシミュレーションの抽象的な世界は。そのため、日々直面しなければならない基本的な事柄を調理する野菜は、から同じプログラムでは、自然は、Pythonの基礎として分類されています。
マルチスレッド
ああ、料理と一緒に取得することができ、調理波を証明するために、組み込みのPythonのスレッドモジュールでもクラスを通します。
import time
import threading
# 我每天下班之后首先是: 煮饭, 做菜
def cook_rice():
for i in range(3):
print(f"cook rice ...{i}")
time.sleep(1)
def cook_dishes():
for i in range(4):
print(f"cook dishes...{i}")
time.sleep(0.5)
if __name__ == '__main__':
# 假设就各创一个线程来弄
t1 = threading.Thread(target=cook_rice)
t2 = threading.Thread(target=cook_dishes)
# 启动多线程
t1.start()
t2.start()
cook rice ...0
cook dishes...0
cook dishes...1
cook rice ...1
cook dishes...2
cook dishes...3
cook rice ...2
あなたは、プロセスは、「タスクスケジューラ」を作るの複数のプロセスは、あなたが、ああ、複数のスレッドがそれを実行するために、ここではスレッドという用語過程で「スイッチ」に続けていることがわかります。(実際には、実際には複数のないスレッドを)実行されますが、あまりにも速いCPUをスケジュールします。
すべての子スレッドの待機 - メインスレッド
マルチプロセスが同じであると、メインスレッドは、デフォルトではすべての子プロセスを待ちます、すべての終了後に、プログラムが実際に終了します。
そして、マスの参加は、2つの方法で、同じである、スレッドを作成*引数と** kwargsから。これらは何も、ライン上のおおよその印象ではない、とプロセスが書き込みに、Baiduは理解したいと思いますどのように、より多くの重要な特性です。
import time
import threading
# 我每天下班之后首先是: 煮饭, 做菜
def cook_rice(n):
for i in range(n):
print(f"cook rice ...{i}")
time.sleep(1)
def cook_dishes(n):
for i in range(n):
print(f"cook dishes...{i}")
time.sleep(0.5)
if __name__ == '__main__':
# 假设就各创一个线程来弄
t1 = threading.Thread(target=cook_rice, args=(3,))
t2 = threading.Thread(target=cook_dishes, kwargs={"n":4})
# 启动多线程
t1.start()
t2.start()
print("main threading done ....")
cook rice ...0
cook dishes...0
main threading done ....
cook dishes...1
cook rice ...1
cook dishes...2
cook dishes...3
cook rice ...2
メインスレッドを守ります
しかし、また、プロパティ、設定する、あるコードの観点から同じピースのプロセスとデーモン=真をします。
import time
import threading
def cook_rice(n):
for i in range(n):
print(f"cook rice ...{i}")
time.sleep(1)
if __name__ == '__main__':
# 将 daemon 参数 传为 True 即设置为了守护主线程.
t1 = threading.Thread(target=cook_rice, args=(4,), daemon=True)
# 启动多线程
t1.start()
time.sleep(2)
print("main threading done ....")
cook rice ...0
cook rice ...1
cook rice ...2
main threading done ....
私のテストでは、ディスカバリスレッドとプロセスのこの部分は、複数のスレッドでは、異なる点が主要プロセスの終了は、スレッドの残りの部分は実行を継続しますデーモンに一つだけのスレッドであれば、そしてよりもデーモン与えるプロセスは、停止した場合、プロセスは、全体の使命は一時的に、非常に不思議ではない、まだその時点で到着しました。従います、そして私はCECEが見る従ってください。
閉塞 - 子供のための待機を終了
実際には、これは直接、私は単純に精通なりたい主に何を、デーモンはまだラインではなく、設定され実行されていない、不可解な)(参加このAPIはただの友達。
import time
import threading
# 我每天下班之后首先是: 煮饭, 做菜
def cook_rice(n):
for i in range(n):
print(f"cook rice ...{i}")
time.sleep(1)
if __name__ == '__main__':
# 假设就各创一个线程来弄
t1 = threading.Thread(target=cook_rice, args=(4,), daemon=True)
# 启动多线程
t1.start()
time.sleep(2)
# 阻塞等待, 子进程结束
t1.join()
print("main threading done ....")
cook rice ...0
cook rice ...1
cook rice ...2
cook rice ...3
main threading done ....