サブプロセスを作成し、それと通信するためにソケットを開いてから、ソケット上にmultiprocessing.connectionオブジェクトを作成するPythonアプリケーションがあります。接続オブジェクトは、共有キー(ランダムに生成された)とhmacを使用して、他のプロセスが接続を介して通信できないようにします。
Linuxでは、これは完全に機能します。Windowsでは、次のエラーが発生します。
multiprocessing.AuthenticationError: digest received was wrong
キーはランダムに生成されたビットの文字列であり、stdinによってサブプロセスに送信される前にピクルスにされます。
authkey = ''.join([chr(random.getrandbits(7)) for i in range(20)])
そして、私はこのように接続の両端でキーが一致することを注意深くチェックしました:
print "key:", ' '.join([str(ord(x)) for x in authkey])
サーバーは次のコマンドで起動されます。
l = multiprocessing.connection.Listener(
('localhost', int(port)), authkey=authkey)
..そしてクライアントは次のように開始されます:
c = multiprocessing.connection.Client(
('localhost', int(port)), authkey=authkey)
両方のプロセスは、同じバージョンのpythonを使用して同じマシンで実行されています。
見知らぬ人ですが、キーを修正すると(たとえば、authkey ='test')、プログラムを最初に実行したときにAuthenticationErrorが発生しますが、その後の実行では発生しません。