Streamlitを活用したシリアル通信ツールの実装と課題
目的
特定のフォーマットでテスト用コマンドを生成し、末尾にチェックサムを付加するシリアル通信ツールの開発。
開発プロセス
初期段階ではStreamlitで一括処理を試みたが、ポートのオープン・クローズが関数内で完結するため、設定変更や状態管理が困難だった。そこで、UI部分とシリアル処理部分を分離しようとしたが、ソケット通信を導入する必要があり、構成が複雑化 ...
9月7日 13:53 投稿
Pythonにおけるプロセスベースのマルチタスク処理
マルチタスクの概念
マルチタスクとは、複数のタスクを同時に実行する概念です。現代のオペレーティングシステムはすべてマルチタスクに対応しており、複数のアプリケーションを同時に実行できます。
マルチタスクの紹介
マルチタスクは、プログラムの実行効率を高めるために利用されます。マルチタスクには「並行 (Concurrency)」と「並列 (Parallelism)」の2つの実行形 ...
9月7日 13:20 投稿
Python標準ライブラリによるスレッドプール・プロセスプールの活用と並行サーバーの構築
ThreadPoolによる非同期タスク処理
Pythonの`multiprocessing.pool`モジュールを利用することで、スレッド管理を簡素化し、I/Oバウンドな処理の効率を向上させることができます。以下のコードは、スレッドプールを生成し、複数のタスクを非同期に実行する例です。
import time
from multiprocessing.pool import ThreadPool
# タスク処理用の関数定義
def async_task(ta ...
8月25日 15:12 投稿
Pythonマルチプロセスにおける排他制御とプロセス間通信の実装
複数のプロセスが同時に共有リソース(ファイル、データベースなど)を操作すると、競合状態が発生し、データの整合性が崩れる可能性があります。これを防ぐために排他ロック(Mutex)を使用し、特定の処理を逐次的に実行させることが有効です。
排他ロックの実装例
import os
import json
import time
import random
from multiprocessing import Process, Lock
def res ...
7月19日 21:57 投稿
Pythonマルチプロセス通信における3つの方法のパフォーマンス比較 (Queue, Pipe, ZeroMQ)
これらの手法はすべてデータのコピーを伴うため、共有メモリほど効率的ではありません。しかし、ロック管理などの複雑さがない分、使い勝手は良いでしょう。機能的には似ていますが、それぞれのシナリオにおけるパフォーマンスは異なります。
以下にテストコードを示します。ロジックは概ね同じです。今回のテストデータは、指定されたサイズの整数リストです。
ここでは ...
7月12日 23:18 投稿
並行処理とネットワークプログラミングの基礎
基本的なソケット通信
import socket
サーバー = socket.socket() # TCPプロトコルをデフォルトで使用
サーバー.bind(('IPアドレス', ポート番号)) # IPとポートのバインディング
サーバー.listen(5) # 接続待ちキュー
クライアント, アドレス = サーバー.accept() # 接続受付、3ウェイハンドシェイク完了状態
データ = クライアント.recv(1024) # データ受信
ク ...
6月8日 21:59 投稿
Pythonマルチプロセス環境におけるデータ共有のメカニズムと実装
Pythonのmultiprocessingモジュールを用いて並列処理を構築する際、親プロセスと子プロセス間で状態を共有しようとすると、意図しない動作に直面することがあります。以下のスクリプトは、セマフォを用いて同時実行数を制御しつつ、複数のタスク結果を辞書へ集約する実装例です。
import time
from multiprocessing import Process, Semaphore
def execute_task(semaphore ...
6月4日 22:34 投稿