ちょっといきぬき

vimとかpythonとかロボットとかMLとか環境構築とかの興味ある技術のことを書きたいだけの人生だった。

【解決?】subprocessを非同期実行しつつ、確実にkillしたい

具体的にはarecordで音声ストリームを取得しつつ、任意のイベントを受け取るかデストラクタで確実にkillしたい。

以下のような一連のコードをThreadで実行している。

self.buff = Queue.Queue(1000)
reccmd = ["arecord", "-f", "S16_LE", "-r", "16000", "-t", "raw", "-q"]

process = subprocess.Popen(reccmd, stdout=subprocess.PIPE)

logger.debug("start buffering process")

self.flag_Buffering = True
while self.flag_Buffering:
    self.buff.put(process.stdout.read(2048))

logger.debug("killing buffering process")
process.kill()

時たまkillできずに子プロセスが居残っているのか、再度実行した時にクラッシュする。
無限ループをフラグで管理している部分が怪しい。

デストラクタでのフラグ変更は確実に呼び出される保証が無いが、 with文なら上手くいく…?

withクラスの実装。

2018年1月30日追記

発話区間の音声を取得するためにbuffというQueueを作り、 発話の検知イベントの遅れを加味して発話前のコンマ数秒からbuffに残し、 発話終わりのイベントが来たタイミングで録音終了、subprocessをkillしたかった。

そもそも別スレッドで実行する必要が無かったので メインスレッドのイベントループ内でstdout.read()した。

素直に動いてくれたけどタイトルの非同期実行しつつ確実にkillは相変わらず不明。 withか。

その他備忘録メモ

process.stdout.read()を使う時にパイプバッファが詰まって デッドロックするのでcommunicate()を使おうという記事を多々見たが ストリームの取得はstdout.read()しか方法が無い様子

NAOqi Dialog(QiChat)について

教える時用のメモ

基本NAO寄りだけどPepperもおんなじなはず。

※ 2017年10月30日現在

続きを読む

NAO/Pepperで固定IPを割り当てたい

元々NAO/PepperにStatic IPを振りたかったがうまくいかず挫折。
この度手順を理解したので忘れないようにここに記す。

フォーラムを見ていると、既に設定されている(一度接続した事がある)アクセスポイントについては設定を削除してから行う必要があるとのことだが…

ロボットウェブページ、旧ロボットウェブページからは上手く設定が削除できなかったり(?)とハマりポイントがある気がしたので該当アクセスポイントの設定済みな状態からほぼ確実にIP固定する方法についての手順まとめ。

続きを読む

AWS Elastic BeanstalkでWebSocketサーバーから426 Upgrade Required

備忘録として

※個人記事のため記載内容に誤りが含まれる可能性があります

やりたいこと

Application Load BarancerがWebSocketに対応したということで
Elastic Beanstalk上のNode.jsでWebSocketサーバーを立てる。

WebSocket Clientは汎用のものにしたい。(Not Socket.io)

続きを読む

AutomatorとPythonでWindows/Macの共有フォルダパスを相互変換する話。

(※はてな初心者なので画像の出し方が分からぬ…)

会社で共有フォルダを使って作業していると
Windowsユーザーからは

ファイル共有しました。
\\hoge\fuga\piyo\file

Macユーザーからは

以下のパスに共有しました。
smb://hoge/fuga/piyo/file

といった連絡が入ってきて、お互いに

\\hoge\fuga\piyo\file ⇄ smb://hoge/fuga/piyo/file  

とパスを書き換える必要が出てきます。

一般的にはマイノリティな立場のMacユーザーが パスを書き換えるらしいです。

こういったやり取りが毎日行われているらしく、 自動化できないか相談を受けたため調べて解決した話を記述します。

続きを読む

NAO/PepperでもPyAudioが使いたい!

なんとなく使えるようにしたかった

NAO/Pepper上で音声録音/再生をしたい時、通常はNAOqi標準APIのALAudioDeviceを使います。例えばChoregrapheのRecord Soundボックスとかが使ってる。

ただ、なんとなくNAO/Pepper上でPyAudioを使いたくなったため、手順とハマりポイント備忘録としてブログに残します。

(世の中のPythonサンプルコードそのまま使いたいとかなんとか)

続きを読む

いきごみ…

IT系企業に務めて社会人歴3年くらいですが、だらだらしてると腑抜けそうなので自発的に情報発信したいと一念発起ではてなブログ始めました。

興味のある技術や趣味などジャンル不問で継続第一にやっていきたいです。

 

希望的観測です。