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 投稿