start.pyコードは以下のとおりです。スレッド単位で同じプログラムの異なる出力
import threading
class myThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
currentThreadname = threading.currentThread()
print "running in ", currentThreadname
thread = myThread(1,"mythrd")
thread.start()
pythonで2回起動します。
python start.py
running in <myThread(mythrd, started 140461133485824)>
python start.py
running in <myThread(mythrd, started 140122860668672)>
run.pyコードは以下のとおりです。
import threading
class myThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
currentThreadname = threading.currentThread()
print "running in ", currentThreadname
thread = myThread(1,"mythrd")
thread.run()
run.pyはstart.pyとは1行だけです。
run.pyを2回起動してください。
python run.py
running in <_MainThread(MainThread, started 139854546364160)>
python run.py
running in <_MainThread(MainThread, started 139854546364160)>
startandrun.pyコードは以下のとおりです。
class myThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
currentThreadname = threading.currentThread()
print "running in ", currentThreadname
thread = myThread(1,"mythrd")
thread.start()
thread.run()
ここでもstartandrun.pyを2回起動します。 JohanLとして
python startandrun.py
running in <myThread(mythrd, started 140317119899392)>
running in <_MainThread(MainThread, started 140317144454912)>
python startandrun.py
running in running in <_MainThread(MainThread, started 139980210505472)>
<myThread(mythrd, started 139980185949952)>
は言う:最初に実行されるためにどのよう
二つの別々のスレッドを実行し、すべてのベットはオフになっています。
基本的にスケジューリングをオペレーティングシステムに委ねています。 startandrun.pyを実行する最初の時間、
thread.start()
が
thread.run()
前に実行し、出力をもたらす:
running in <myThread(mythrd, started 140317119899392)>
running in <_MainThread(MainThread, started 140317144454912)>
startandrun.pyを実行する第二の時間、thread.start()
がthread.run()
後に実行された、なぜ出力が得られません:
running in <_MainThread(MainThread, started 140317144454912)>
running in <myThread(mythrd, started 140317119899392)>
代わりの
running in running in <_MainThread(MainThread, started 139980210505472)>
<myThread(mythrd, started 139980185949952)>
二つの別々のスレッドを実行する場合、全てのベットがオフの通りです。最初に実行されます。基本的にはスケジューリングをオペレーティングシステムに委ねています。そのため、スレッドが同じデータにアクセスしているときに、異なる同期プリミティブ(セマフォ、モニターなど)が必要です。 – JohanL
'thread.run'は新しいスレッドを開始しないので、このコードはおそらくあなたが思っていることをしていません。スレッドを開始するには、 'start'を呼び出す必要があります。 'run'を直接呼び出すべきではありません。' start'があなたのために行います。開始と実行を呼び出すだけで、あなたが理解しようとしている問題がさらに混乱するようになります。 "スレッドオブジェクトが作成されると、スレッドのstart()メソッドを呼び出すことによってそのアクティビティを開始する必要があります。これにより、別のスレッドの制御でrun()メソッドが呼び出されます。 – pvg