python 2マルチスレッド_マルチプロセス_ルーチン
3708 ワード
pythonを使用してマルチスレッドを実装するには、次の手順に従います.
まずpythonのマルチスレッドは偽のマルチスレッドである.
スレッド、プロセスの定義を次に示します.
スレッドの簡単な定義は:スレッドはすべてCPUを利用する基本単位として、同時実行することができて、プログラムの中で1つの独立して実行する断片で、最小のオーバーヘッドを費やす実体です.
プロセスの簡単な定義は、プロセスは独立した機能を持つプログラムであり、あるデータセットに関する実行アクティビティです.システムリソースを申請して所有することができ、動的な概念であり、アクティブなエンティティです.
マルチスレッドの簡単な定義は、複数のスレッドが同時に実行される技術です.
マルチプロセスの簡単な定義は、1つの親プロセスがいくつかのサブプロセスを作成したことです(関係のない2つのpythonプログラムが1つのpythonファイルに結合されていることに相当します).
生物学的に類比することができます:例えば人体の各種の器官は同時に働いてやっと人体の安定を維持することができて、類比することができて多プロセスのために異なる事を処理することができて、今回の新型コロナウイルスを例にして、プロセス類比は免疫器官で、スレッドは各種の免疫細胞で、プロセスの目的はウイルスを撲滅するためで、多くのエネルギーと物質用を申請して、本当にこれらのエネルギーと物質を使うのはスレッドで、例えば、たくさんの白血球がウイルスを追跡し、プロセス申請の資源を使って、プロセスのことを処理して、複数の白血球が同時に働いてマルチスレッドに類比することができます.
注意:スレッドは非同期なので、類比するとおかしいですが、白血球がウイルスを飲み込む準備をしていたところ、先に一時停止し、もう一つの白血球が死ぬ準備をしていたと考えてみてください.の
以下はpython 2関連インスタンスです.
マルチプロセス:
マルチプロセス:
サービス:
クライアント(複数のクライアントを実行すると、マルチスレッドの意味がわかります):
なぜこのpythonのマルチスレッドは偽のマルチスレッドなのでしょうか.
グローバル解釈器ロックの問題のため、白話点は現在のプロセッサの多くがマルチコアであるが、pythonマルチスレッドは永遠に1つのコアしか占めていない.つまり、あなたは8コアプロセッサであり、pythonで8つのデッドサイクルのスレッドを書くことができ、このcpuの占有率は永遠に12.5%程度しかないことに気づくだろう.しかし、c言語のような書くマルチスレッドは、100%まで作ることができる.pythonのプログラムも100%占有したいので、8つのデッドサイクルスレッドをマルチプロセスに変えてみてください.
まずpythonのマルチスレッドは偽のマルチスレッドである.
スレッド、プロセスの定義を次に示します.
スレッドの簡単な定義は:スレッドはすべてCPUを利用する基本単位として、同時実行することができて、プログラムの中で1つの独立して実行する断片で、最小のオーバーヘッドを費やす実体です.
プロセスの簡単な定義は、プロセスは独立した機能を持つプログラムであり、あるデータセットに関する実行アクティビティです.システムリソースを申請して所有することができ、動的な概念であり、アクティブなエンティティです.
マルチスレッドの簡単な定義は、複数のスレッドが同時に実行される技術です.
マルチプロセスの簡単な定義は、1つの親プロセスがいくつかのサブプロセスを作成したことです(関係のない2つのpythonプログラムが1つのpythonファイルに結合されていることに相当します).
生物学的に類比することができます:例えば人体の各種の器官は同時に働いてやっと人体の安定を維持することができて、類比することができて多プロセスのために異なる事を処理することができて、今回の新型コロナウイルスを例にして、プロセス類比は免疫器官で、スレッドは各種の免疫細胞で、プロセスの目的はウイルスを撲滅するためで、多くのエネルギーと物質用を申請して、本当にこれらのエネルギーと物質を使うのはスレッドで、例えば、たくさんの白血球がウイルスを追跡し、プロセス申請の資源を使って、プロセスのことを処理して、複数の白血球が同時に働いてマルチスレッドに類比することができます.
注意:スレッドは非同期なので、類比するとおかしいですが、白血球がウイルスを飲み込む準備をしていたところ、先に一時停止し、もう一つの白血球が死ぬ準備をしていたと考えてみてください.の
以下はpython 2関連インスタンスです.
マルチプロセス:
import multiprocessing
# 1
def multiProc1(number):
time.sleep(3)
print(number)
# 2
def multiProc2(number):
print(number)
#
def mainProc():
print("Welcome!!!")
# ( , )
p = multiprocessing.Process(target=multiProc1,args =(1))
print('Child process multiProc1 will start.')
p.start()
p = multiprocessing.Process(target=multiProc1,args =(2))
print('Child process multiProc1 will start.')
p.start()
if __name__ == '__main__':
mainProc()
マルチプロセス:
サービス:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import socket
import threading
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr)
sock.send(b'Welcome_To_Join_The_Conference') #
while True:
data = sock.recv(1024) #
if not data or data.decode('utf-8') == 'exit':
break
#
sock.close()
print('Connection from %s:%s closed.' % addr)
def startServer():
#
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.0.102' # IP
port = 8888 # ( 1025~65535 )
#
try:
s.bind((host, port)) #
print("Server started successfully !")
except OSError:
return False
s.listen(5)
print('Waiting for connection...')
# ,
while True:
sock, addr = s.accept()
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start()
if __name__ == '__main__':
startServer()
クライアント(複数のクライアントを実行すると、マルチスレッドの意味がわかります):
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import socket
def connectServer():
try:
#
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.0.102' # IP
print('Current computer IP address:' + host)
port = 8888 # ( 1025~65535 )
#
s.connect((host, port))
data = s.recv(1024).decode('utf-8') #
print(data)
s.send(b'Welcome_To_Join_The_Conference') #
except Exception,err:
print(err)
finally:
s.send(b'exit')
s.close()
if __name__ == '__main__':
connectServer()
なぜこのpythonのマルチスレッドは偽のマルチスレッドなのでしょうか.
グローバル解釈器ロックの問題のため、白話点は現在のプロセッサの多くがマルチコアであるが、pythonマルチスレッドは永遠に1つのコアしか占めていない.つまり、あなたは8コアプロセッサであり、pythonで8つのデッドサイクルのスレッドを書くことができ、このcpuの占有率は永遠に12.5%程度しかないことに気づくだろう.しかし、c言語のような書くマルチスレッドは、100%まで作ることができる.pythonのプログラムも100%占有したいので、8つのデッドサイクルスレッドをマルチプロセスに変えてみてください.