1

リストに multiprocessing.Process オブジェクトのコレクションがあり、それらはすべて「プロセス セーフ キュー」と呼ばれるものの同じインスタンスを使用して、プロセス セーフ (スレッド セーフだがプロセスあり) の方法で通信します。スレッドの管理を担当する親プロセス。

子プロセスが何かをキューに入れようとすると、最初に multiprocessing.Manager > RLock を取得し、次にキューに書き込み、最後にロックを解放する ProcessSafeQueue().enqueue() を呼び出します。

この場合、それは子プロセスの pid でした。エラーのトレースバックは次のとおりです。

Traceback (most recent call last): 
File /usr/lib/python2.5/site-packages/my_project/some_module.py, line 87, in send_data
    q.enqueue(os.getpid())
File /usr/lib/python2.5/site-packages/my_project/some_module.py, line 33, in enqueue
    self.lock.acquire()
File /usr/lib/python2.5/site-packages/processing/managers.py, line 979, in acquire
    return self._callMethod(\'acquire\', (blocking,))
File /usr/lib/python2.5/site-packages/processing/managers.py, line 740, in _callMethod
    self._connect()
File /usr/lib/python2.5/site-packages/processing/managers.py, line 727, in _connect
    connection = Client(self._token.address, authkey=self._authkey)
File /usr/lib/python2.5/site-packages/processing/connection.py, line 187, in Client
    answerChallenge(c, authkey)
File /usr/lib/python2.5/site-packages/processing/connection.py, line 425, in answerChallenge
    message = connection.recvBytes()

そして、実際のエラーは次のとおりです。

IOError: [Errno 11] リソースが一時的に利用できません

アプリケーションが約 7 時間正常に実行された後、なぜこのエラーが発生するのかを誰かが理解するのを手伝ってくれるかどうか疑問に思っています。

4

2 に答える 2

1

同様の問題があり、socket.setdefaulttimeoutを削除して解決しました。

于 2013-07-04T08:10:13.373 に答える
0

ここでの答えは、エラーが完全に誤解を招くということです。 Resource temporarily unavailable実際には、ソケットの読み取り中に何らかのエラーが発生したことを意味します。これは、認証エラーであるか、読み取り可能なデータがなかっただけである可能性があります (エラーが発生する理由はわかりませんが、実際にはそうです)。ここでの解決策は、エラーを抑制して再試行することです。

[Python での同時実行に関する数年間の経験を経て更新]

同時実行モデルを設計して、同期メカニズム (ロック、キュー、またはセマフォ) の必要性を完全に削減/削除すると、設計が簡素化され、脆弱性が少なく、上記のエラーなしで機能することがわかりました。

于 2011-07-28T05:51:49.300 に答える