Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでスレッドとの並行性を実装する方法は?


はじめに

Pythonには、スレッド、サブプロセス、ジェネレーター、その他の並行プログラミングのトリックを使用するなど、さまざまなアプローチがあります。スレッドを実装する前に、並行性とは何かを正確に理解しましょう。

同時実行性は、単一のプログラム内のロジックの一部であり、I / Oの個別のストリーム、SQLクエリの実行など、実行が同時に行われ、互いに独立しているように見えるように、多くの異なる実行パスを開くことができます。 。

その方法..

まず、サイトのURLを調べるための単一のスレッドを作成し、後でスレッドの概念を使用してプログラムを高速化する方法を確認します。

# Step 1 - Make a list of website url you want to visit today
import requests

tutorialpoints_url = ['https://www.tutorialspoint.com/python/index.htm',
'https://www.tutorialspoint.com/cplusplus/index.htm',
'https://www.tutorialspoint.com/java/index.htm',
'https://www.tutorialspoint.com/html/index.htm',
'https://www.tutorialspoint.com/cprogramming/index.htm']


# function to request the url passed and return the status code
def visit_site(site_url):
"""
Makes a GET request to a website URL and prints response information
"""
response = requests.get(site_url)
print(f' *** {site_url} returned {response.status_code} after {response.elapsed} seconds')


# Let us create a single thread to fetch the response
if __name__ == '__main__':
for site_url in tutorialpoints_url:
visit_site(site_url)
print(f" *** end of the program ***")


*** https://www.tutorialspoint.com/python/index.htm returned 200 after 0:00:00.091103 seconds
*** https://www.tutorialspoint.com/cplusplus/index.htm returned 200 after 0:00:00.069889 seconds
*** https://www.tutorialspoint.com/java/index.htm returned 200 after 0:00:00.075864 seconds
*** https://www.tutorialspoint.com/html/index.htm returned 200 after 0:00:00.075270 seconds
*** https://www.tutorialspoint.com/cprogramming/index.htm returned 200 after 0:00:00.077984 seconds
*** end of the program ***

出力から何を観察しましたか?サイトのURLは順番に処理されます。訪問したいさまざまな地理的な場所から数百のURLがある場合、プログラムはサーバーからの応答を待つのに多くの時間を費やしている可能性があります。

スレッド化されたプログラムを作成して、リクエストを並行して送信し、待たずに次のステップに進みましょう。

from threading import Thread

# function to request the url passed and return the status code
def visit_site(site_url):
"""
Makes a GET request to a website URL and prints response information
"""
response = requests.get(site_url)
print(f' *** {site_url} returned {response.status_code} after {response.elapsed} seconds')

# Loop through the website url and create threads for each url
if __name__ == '__main__':
for site_url in tutorialpoints_url:
t = Thread(target=visit_site, args=(site_url,))
t.start()


*** https://www.tutorialspoint.com/python/index.htm returned 200 after 0:00:00.082176 seconds
*** https://www.tutorialspoint.com/html/index.htm returned 200 after 0:00:00.086269 seconds
*** https://www.tutorialspoint.com/java/index.htm returned 200 after 0:00:00.100746 seconds
*** https://www.tutorialspoint.com/cplusplus/index.htm returned 200 after 0:00:00.120744 seconds *** https://www.tutorialspoint.com/cprogramming/index.htm returned 200 after 0:00:00.111489 seconds

ディスカッション..

  • スレッドライブラリを使用して、独自のスレッドで呼び出し可能なPythonを実行できます。

  • start()メソッドは、site_url引数を使用してvisit_site関数を呼び出します。

  • 一度開始されたスレッドは、オペレーティングシステムによって完全に管理されている独自のスレッドで実行されます。

これで、スレッドが生きているか死んでいるか(完了)を確認したい場合は、is_alive関数を使用できます。

if t.is_alive():
print(f' *** {t} is Still executing')
else:
print(f' *** {t} is Completed')


*** <Thread(Thread-10, stopped 4820)> is Completed

  1. Bokeh(Python)で画像を操作する方法は?

    Bokehで画像を操作するには、 image_url()を使用します メソッドと画像のリストを渡します。 ステップ :func:show のときにファイルに保存された出力を生成するように、デフォルトの出力状態を構成します と呼ばれます。 プロット用の新しい図を作成します。 指定されたURLから読み込まれた画像をレンダリングします。 Bokehオブジェクトまたはアプリケーションをすぐに表示します。 例 from bokeh.plotting import figure, show, output_file output_file('image.html') p = fi

  2. PythonでAPIの結果を視覚化する方法

    はじめに.. APIを作成する最大の利点の1つは、現在/ライブのデータを抽出することです。データが急速に変化している場合でも、APIは常に最新のデータを取得します。 APIプログラムは、非常に具体的なURLを使用して、特定の情報を要求します。 SpotifyまたはYoutubeMusicで2020年に最も再生された100曲をToppします。リクエストされたデータは、JSONやCSVなどの簡単に処理できる形式で返されます。 Pythonを使用すると、ユーザーは考えられるほぼすべてのURLにAPI呼び出しを記述できます。この例では、GitHubからAPIの結果を抽出して視覚化する方法を示します