AI Technology Community
531views
0likes
9.1、TCP/IPプロトコルの詳細
コンピュータ間で情報を交換するには、情報交換の方式を定義する必要があります。1965年、ドナルド・デイヴィス(Donald Davies)は、2台のコンピュータ間で伝送されるデータを表すために「メッセージ」という言葉を生み出しました。1969年、最初の広域ネットワークであるARPNETが登場しました。このネットワークは、メッセージ交換を使用した最初のネットワークでもあります(メッセージ交換に対して、初期の電話では回路交換が使用されていました。つまり、
12-29 18:01
484views
0likes
9.2、ソケットとは何か
先の説明を通じて、TCP/IPはとても複雑だと思われたでしょうか。実は、我々はこれらのプロトコルの内部の詳細を完全に理解する必要はありません。なぜなら、大多数のユーザーにとって、これらのプロトコルをどのように使ってデータを転送するかが関心の対象だからです。この節では、歴史のあるインターフェース——ソケットを紹介します。ソケットを使えば、我々は直接これらのプロトコルとやり取りする必要もなく、これらのプロトコルの
12-29 18:00
576views
0likes
9.3、TCP echoサーバーの構築(Python実装)
この節では、簡単なエコーサーバーを作成します。このサーバーはユーザーの接続を待ち、接続に成功すると、受信したユーザーの入力をそのままクライアントに返送します。ユーザーが接続を閉じるまでこれを繰り返し、その時点でサーバーは自動的に終了します。この例では TCP プロトコルを使用しており、使用するプロトコルはソケットを作成する際に指定します。方法は次のとおりです:s = socket.so
12-29 18:00
521views
0likes
9.4、簡単なTCPクライアントの作成
「TCPエコーサーバーの構築」の節を基に、データのやり取りを実現するためにクライアントが必要です。この節では、このようなクライアントを作成します。このクライアントは、前述のサーバーと接続を確立し、簡単なデータを送信し、その後サーバーからの返信データを読み取ります。まず、socketオブジェクトを作成する必要があります。サーバー側と同様に、使用するTを指定します
12-29 18:00
520views
0likes
9.5、UDP echoサーバーの構築(Python実装)
『TCPエコーサーバーの構築』と『簡単なTCPクライアントの作成』では、それぞれTCPプロトコルを使用したエコーサービスのサーバー側コードとクライアント側コードについて説明しました。本节では、UDP版のエコーサービスを実装します。TCPとUDPは大きく異なりますが、ソケットインターフェースの面ではそれほど大きな違いはありません。ただ、ソケットを作成する際には、soを指定する必要があります
12-29 17:59
519views
1likes
8.1、マルチスレッドとは何か、Pythonマルチスレッドプログラミング
早くも20世紀60年代に、プロセスの概念が登場しました。しかし、プロセスはリソースの所有者であり、プロセスの作成、破棄、スケジューリングのコストは比較的高いため、軽量級プロセスへの需要が生まれました。20世紀80年代になると、スレッドが登場しました。スレッドはプロセスに似ており、独立して実行できますが、使用コストはプロセスよりもはるかに低いです。スレッドは一般的にプログラム、データおよびスレッド制御を含みます
12-27 16:40
536views
0likes
8.2、Python threadモジュールの使用方法の詳細
このパッケージは Python 2 では正常に使用できる状態ですが、Python 3 では廃止予定の状態にあります。まだ使用できますが、パッケージ名が _thread に変更されています。thread パッケージを使用するにはまずそのパッケージをインポートする必要があります。Python 2 では以下の文を使用してインポートします:import thread 一方、Python 3 では、パッケージ名が thread から _thread に変更されたため、次のようにする必要があります
12-27 16:39
477views
0likes
8.3、Python threadingモジュールの使い方
thread パッケージと比べて、threading パッケージはより多くの機能を提供しています。このパッケージの使い方は基本的に2つのステップに分けられます。最初のステップは threading.Thread のインスタンスオブジェクトを作成することで、このときそのオブジェクトに対応するスレッドは「新規作成」状態になります。2番目のステップはそのオブジェクトを操作することで、例えば start() を呼び出してそのスレッドを「就緒」状態に移行させます。スレッドのインスタンスオブジェクトを作成することがで
12-27 16:39
524views
0likes
8.4、Pythonスレッド同期実現方式の詳細
スレッドが起動されると、自動的に実行されます。しかし、それらを同期して実行したい場合は、どうすればよいでしょうか?簡単な例を挙げましょう。2つのスレッド A と B があり、A はネットワークからデータを読み取り、変数 X に保存する役割を担い、B は変数 X 内のデータを処理する役割を担っています。このとき、スレッド B は A と同期する必要があります。つまり、B は A から信号を受け取るまで待機し、それがあって初めて処理を開始する必要があります。
12-27 16:33
535views
0likes
8.5、Pythonスレッドセキュリティ(同期ロック機構)
いわゆるスレッドセーフとは、あるリソースへのアクセスが、マルチスレッド状態でもシングルスレッド状態でも同じ結果が得られ、結果がスレッドスケジューリングなどの要因の影響を受けないことをいいます。例えば、次のコードでは、関数 operate_resource() の中で g_list に新しい要素を追加し、新しい要素の値は g_list の最後の要素の値に 1 を加えたものになります。g_list=[]defoperate_res
12-27 16:32
524views
0likes
8.6、Pythonスレッドデッドロックの原因と解決方法
デッドロックはマルチスレッドプログラミングで頻繁に議論される問題です。いわゆるデッドロックとは、スレッドがあるリソースを無期限に待ち続けることです。最も単純なデッドロック現象は、あるスレッドが自分自身がすでに取得しているロックを待つことです。そのロックはすでに自分自身が取得しているため、2回目にそのロックを申請すると待機キューに入れられますが、この待機時間は永遠です。以下のコードはこの状況を示しています。
12-27 16:32
470views
0likes
8.7、プロセスとは
コンピュータの発展初期段階では、タスクスケジューリング方式は比較的単純で、コンピュータはユーザーからタスクを受け取り、それから指定されたタスクが完了するまでずっと実行し続け、その後コンピュータはユーザーの次の計算タスクを待ちます。このような動作方式では、任意の時刻にコンピュータは1つのタスクしか完了できません。もしそのタスクが待機状態にある場合、コンピュータは他のタスクを実行することもできません。そのために
12-27 16:31
566views
0likes
8.8、Python subprocessモジュールの使い方の詳細
Python 2.7 および Python 3 では、システムに標準搭載されている subprocess モジュールがあり、このモジュールは主に子プロセスを管理するために使用されます。このモジュールを使用する前に、以下の方法でインポートする必要があります:import subprocess以前は、新しいプロセスを起動するには os.system() メソッドを使用することができました。比較すると、subprocess モジュールはより多くの柔軟性を提供し、完全に o を置き換えることができます
12-27 16:31
526views
0likes
8.9、Python multiprocessingモジュールの説明
multiprocessingモジュールはインストールする必要がなく、Python 2.6からシステムに同梱されています。このモジュールのインターフェース関数はthreadingに似ていますが、スレッドではなくプロセスを起動します。このモジュールを使用するには、まずmultiprocessingをインポートする必要があります。方法は以下の通りです:import multiprocessingこのモジュールには多くのクラスが含まれており、例えばLockなどがあり、これはマルチスレッドにおける
12-27 16:30
532views
0likes
8.10、Python osモジュールの使用方法の詳細
本章の最後に、osモジュールに関するプロセスのいくつかのインターフェース関数を紹介しましょう。前ですでにこのモジュールのいくつかのインターフェース関数を使っています。例えば、現在のプロセスのPIDを取得する関数です。これらのインターフェース関数は比較的基礎的で、あまり複雑でない環境でも非常に役立ちます。もしプロセスのいくつかの高度な機能を必ず使用する必要がある場合、依然としてmultiprocessingモジュールまたはsubpを使用することをおすすめします
12-27 16:28
486views
0likes
7.1、Pythonクラスの定義と使用
クラスの最も基本的な機能は、新しい型を定義することです。次の構文を使用して、何の属性も持たない、何もできない空のクラスを定義することができます。class クラス名: pass ここでのクラス名は、変数名と同じように、アルファベット、数字、アンダースコアで構成でき、一般的に先頭文字は大文字で、長さに制限はありません。クラスを定義した後
12-27 16:24
459views
0likes
7.2、Python_init_()と_del_()関数の使い方
__init__()(以降、初期化関数と呼ぶ)はインスタンスオブジェクトを初期化するために使われます。インスタンスオブジェクトを構築するたびに、そのクラスの初期化関数が呼び出されます。この初期化関数では、インスタンスオブジェクトを初期化したり、クラスの特定の属性(例えば、そのクラスによって構築されたインスタンスオブジェクトの数)を更新したりすることができます。初期化関数はパラメータを持つこともでき、異なるパラメータを使用して異なるインスタンスを構築することができます。
12-27 16:23
485views
0likes
7.3、Pythonクラスのプロパティとインスタンスのプロパティ
実はクラス自体もオブジェクトであり、独自の属性も持っています。クラスの属性は一般的にクラスに関連する内容を表し、例えばクラスのバージョンや作者などの情報です。クラスの属性の定義は、クラスの中で直接変数を定義するだけです。以下では、クラス Student にバージョンと作者の情報を追加します。 class Student: # クラスStudentを定義... version = 1.0 # クラスの属性version.
12-27 16:23
464views
0likes
7.4、Python selfの使い方
オブジェクトの属性は、クラスの外部では「オブジェクト名。属性」で表し、クラスの内部では「self.属性」で表します。オブジェクトの属性にも追加、削除、変更、検索の操作があります。たとえば、代入文を使って属性を変更または追加することができ、del() を使ってオブジェクトの属性を削除することができます。属性の追加は、Python のような動的言語では非常に簡単で、追加するタイミングに制限はありません。
12-27 16:23
487views
0likes
7.5、Python getattr()、setattr()、hasattr()、delattr()の使用方法
先に紹介した方法を使って属性を操作するほかに、属性を操作するための汎用的な方法もあります。この方法は静的リフレクションメカニズムに似ており、つまりオブジェクトの具体的な定義がわからない場合でも、クエリなどの方法でそのオブジェクトのいくつかの情報を取得することができます。例えば、オブジェクト a を取得しましたが、オブジェクト a がどのような型で、どのような属性を持っているかわからない場合、di
12-27 16:22