Pythonのgeventを使用して、実行中の複数のコルーチン/マイクロスレッド/ Greenletsにまたがるイベントをログに記録するための最良のアプローチは何ですか?
ログに記録したいイベントの例には、新しい接続の作成やソケットサーバーへの接続の削除が含まれます。
この考え方に沿って、「生成された」コルーチンが同じファイルにログを記録することは可能ですか?そのファイルへの潜在的な同時書き込み試行のために、それもお勧めですか?
Pythonのgeventを使用して、実行中の複数のコルーチン/マイクロスレッド/ Greenletsにまたがるイベントをログに記録するための最良のアプローチは何ですか?
ログに記録したいイベントの例には、新しい接続の作成やソケットサーバーへの接続の削除が含まれます。
この考え方に沿って、「生成された」コルーチンが同じファイルにログを記録することは可能ですか?そのファイルへの潜在的な同時書き込み試行のために、それもお勧めですか?
これが単一のプロセスである場合、いいえ、同時に書き込むことはできません。グリーンレットはすべて同じOSスレッドで実行され、協調してスケジュールされます。一度に実行できるのは1つだけです。
with open('log', 'w') as log:
jobs = [gevent.spawn(log.write, 'event %d' % i) for i in range(10)]
gevent.joinall(jobs)
...グリーンレットがログに1つずつ書き込まれる結果になります。
複数のプロセスがある場合は、にログを記録するredis
か、zeromqを使用して専用デーモンにログを記録することをお勧めします。または、他の外部ログデーモンを使用します。