OpenCV + Python 3.7 が動かなかった
Python 3.7 on Windows 10 の環境に、OpenCV をインストールしました。
conda install -c conda-forge opencv==3.3.1
これ自体は問題なく通るのですが、import cv2 をすると以下のエラーが出ました。
ImportError: DLL load failed
以下の Stack Overflow を参考に、Dependency Walker なる依存関係調査ツールなどを試してみましたがだめでした。
結局のところ、対処方法は Python を 3.6 系にすることでした...
どうも Python 3.7 系だとまだいろいろ問題があるみたいです。
PostgreSQL - 現在のアクティビティ取得
PostgreSQL で、今どんなクエリが走っているのかを知るためには、pg_stat_activity が使えます。
コマンド
select * from pg_stat_activity;
使い方の例
index を作ったり消したりをしていたのですが、なぜか消すのが遅い、というかフリーズしていました。
なんでかな~と調べていたら、以下の Stack overflow がヒット。
pg_stat_activity を使って、index を消そうとしているテーブルに誰かがアクセスしていないか調べてみな!
ということでした。
まさにこれが原因で、pg_stat_activity を見ると、当該テーブルにクエリが走っていました。
そこでこのクエリを出しているプロセスを一度止めて、drop index をしたら一瞬でできました...
というわけで小技でした。
Python で自身の IP アドレスを取得したい - Ubuntu 編
以前、Python から自身の IP アドレスを取得するという記事を書きました。
これは Windows ではいけたのですが、Ubuntu ではループバックアドレスしか取得できないことがわかりました。
そこで Ubuntu で IP アドレスを取得する方法を見つけたので、改めて公開します。
Python socket モジュールで自身の IP アドレスを取得する (Ubuntu)
実行環境は Python 3.6.5 / Ubuntu 18.04.1 LTS です。
$ python3 --version Python 3.6.5 :: Anaconda, Inc.
標準ライブラリの socket モジュールを使います。
リモートソケットに接続する socket API
以下の2種類の API があります。
- socket.connect(address)
- socket.connect_ex(address)
どちらも address に示されるリモートソケットに接続されます。
違いは、connect_ex ではエラーが発生した場合でも例外が送出されないところです。
詳しくは以下のリンクをご覧ください。
socket --- 低水準ネットワークインターフェイス — Python 3.8.2rc1 ドキュメント
たとえばデフォルトゲートウェイ(192.168.100.1とか)の80番ポートなどを指定するには
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((192.168.100.1, 80))
こんな感じで接続できます。
接続中の IP アドレスとポートを取得する socket API
- socket.getsockname()
上記の API でどこかに接続されているとき、その接続元である自分自身の IP とポートを表示します。
上の例に続いて s.getsockname() を実行すると下記のようになります。
s.getsockname()
# ('192.168.100.10', 60321) 等が出力される
上記を組み合わせて、自身の IP アドレスを取得する
import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((192.168.100.1, 80)) ip = s.getsockname()[0]
こんな感じで、ip に IP アドレスの文字列が取得できました。