pythonマルチスレッドstart_new_thread()
2664 ワード
一、簡単に述べる
CPython実装の詳細:GIL(Global Interpreter Lock)のため、CPythonではpythonコードを実行するスレッドは一度に1つしかありませんが、実行向けのライブラリではこの制限を克服することができます.アプリケーションをコンピュータリソースをよりよく利用するにはmultiprocessingを使用したほうがいいです.しかし,複数のI/Oタスクを同時に実行すると,スレッドは依然として良好な選択である.pythonスレッドの役割は主にI/Oタスク,例えばネットワークデータの読み書きなどに対応する.
二、例
1. 関数の説明. start_new_thread(function,args[,kwargs])は、新しいスレッドを作成し、スレッド識別子を返します.functionはスレッド関数,argsはスレッド関数のパラメータ,listである.kwargsはオプションのパラメータで、記入しないことができます.
コードを実行し、次のように出力します.
$ ./thread_demo.py Main thread doing an infinite wait loop… Thread 3 is runing… Thread 1 is runing… Thread 2 is runing… Thread 4 is runing… Thread with ID 1 has counter value 1 Thread with ID 4 has counter value 1 Thread with ID 2 has counter value 1 Thread with ID 3 has counter value 1 Thread with ID 2 has counter value 2 Thread with ID 3 has counter value 2 Thread with ID 4 has counter value 2 Thread with ID 1 has counter value 2 Thread with ID 3 has counter value 3 Thread with ID 4 has counter value 3 Thread with ID 1 has counter value 3 Thread with ID 2 has counter value 3 Thread with ID 1 has counter value 4 Thread with ID 4 has counter value 4 Thread with ID 2 has counter value 4 Thread with ID 3 has counter value 4
スレッド終了関数:thread.exit ().現在のスレッドを終了します.この関数を呼び出すとSystemExit例外がトリガーされ、処理されていない場合はスレッドが終了します.
CPython実装の詳細:GIL(Global Interpreter Lock)のため、CPythonではpythonコードを実行するスレッドは一度に1つしかありませんが、実行向けのライブラリではこの制限を克服することができます.アプリケーションをコンピュータリソースをよりよく利用するにはmultiprocessingを使用したほうがいいです.しかし,複数のI/Oタスクを同時に実行すると,スレッドは依然として良好な選択である.pythonスレッドの役割は主にI/Oタスク,例えばネットワークデータの読み書きなどに対応する.
二、例
1. 関数の説明. start_new_thread(function,args[,kwargs])は、新しいスレッドを作成し、スレッド識別子を返します.functionはスレッド関数,argsはスレッド関数のパラメータ,listである.kwargsはオプションのパラメータで、記入しないことができます.
#!/usr/bin/env python
# _*_ coding = utf-8 _*_
import thread
import time
def work_thread(id):
cnt = 1
print "Thread %d is runing..." % id
while True:
print "Thread with ID %d has counter value %d" % (id, cnt)
time.sleep(2)
cnt += 1
for i in range(1,5):
thread.start_new_thread(work_thread,(i,))
print "Main thread doing an infinite wait loop..."
while True:
pass
コードを実行し、次のように出力します.
$ ./thread_demo.py Main thread doing an infinite wait loop… Thread 3 is runing… Thread 1 is runing… Thread 2 is runing… Thread 4 is runing… Thread with ID 1 has counter value 1 Thread with ID 4 has counter value 1 Thread with ID 2 has counter value 1 Thread with ID 3 has counter value 1 Thread with ID 2 has counter value 2 Thread with ID 3 has counter value 2 Thread with ID 4 has counter value 2 Thread with ID 1 has counter value 2 Thread with ID 3 has counter value 3 Thread with ID 4 has counter value 3 Thread with ID 1 has counter value 3 Thread with ID 2 has counter value 3 Thread with ID 1 has counter value 4 Thread with ID 4 has counter value 4 Thread with ID 2 has counter value 4 Thread with ID 3 has counter value 4
スレッド終了関数:thread.exit ().現在のスレッドを終了します.この関数を呼び出すとSystemExit例外がトリガーされ、処理されていない場合はスレッドが終了します.