Python で XMPP をいじっています。新しいプロセスを生成して、XMPP 経由でメッセージをリッスンできるようにしたいと考えています。メッセージをリッスンする新しいプロセスを生成するには、gevent を使用すると考えました。
何が起こっているのかを追跡するためだけに単純な SQLite3 データベースにメッセージを書き込もうとしていますが、メッセージは 1 人のユーザーのデータベースにしか書き込まれません。私はgeventがどのように機能するかを理解していないと確信しています。
Python で XMPP をいじっています。新しいプロセスを生成して、XMPP 経由でメッセージをリッスンできるようにしたいと考えています。メッセージをリッスンする新しいプロセスを生成するには、gevent を使用すると考えました。
何が起こっているのかを追跡するためだけに単純な SQLite3 データベースにメッセージを書き込もうとしていますが、メッセージは 1 人のユーザーのデータベースにしか書き込まれません。私はgeventがどのように機能するかを理解していないと確信しています。
gevent monkey-patching を有効にする必要があります。これにより、SleekXMPP ライブラリのような Python コードが「ノンブロッキング」になり、複数の greenlet を並行して処理できるようになります。gevent import の後に次の行を追加するだけです。
from gevent import monkey; monkey.patch_all()
ただし、SQLite3 は C で記述された Python 拡張モジュールであると思われるため、呼び出しはまだブロックされているようです。たとえば、gevent スレッドプールを使用します。