標準キューを使用してサンプルをプロセスに送信すると、すべて正常に動作します。しかし、私のニーズは単純なので、SimpleQueueを使用しようとしましたが、何らかの理由で「空の」メソッドが機能しません。ここでは詳細です:Python 3.6: "AttributeError: 'SimpleQueue'オブジェクトに '_poll'属性がありません。
エラー(sample_queueのがキューであるときsample_queueのがSimpleQueueあるとき、すべてが物事が壊れ、動作します)消費者のプロセスから来ている:
def frame_update(i):
while not self.sample_queue.empty():
sample = self.sample_queue.get()
for line in lines:
sample_queue.emptyを実行中() - SimpleQueue。 、)(空窓(queues.py)上のPython 3.6から我々が得る:
:self._pollは、()で のinitに設定されているdef empty(self):
return not self._poll()
c1 = PipeConnection(h1, writable=duplex)
c2 = PipeConnection(h2, readable=duplex)
素晴らしい、[OK]を... :
def __init__(self, *, ctx):
self._reader, self._writer = connection.Pipe(duplex=False)
self._rlock = ctx.Lock()
self._poll = self._reader.poll
if sys.platform == 'win32':
self._wlock = None
else:
self._wlock = ctx.Lock()
だから私はconnection.Pipe(connection.py)から設定されているself._readerに従ってください。
1)SimpleQueueののinitが自己を割り当てるべきではありません: - 質問のだから、カップル
def _poll(self, timeout):
if (self._got_empty_message or
_winapi.PeekNamedPipe(self._handle)[0] != 0):
return True
return bool(wait([self], timeout))
よしは:_readerはPipeConnectionとパイプの接続は、このメソッドを持っていることになるだろう。 self._reader.pollの代わりにself._reader._pollにポーリングしますか?あるいは、私は継承階層で何かを逃していますか?
2#1が動作してはならないので)PipeConnection _pollルーチン)* ...、
をタイムアウトパラメータを取ります - PipeConnectionのいくつかの他の結合は、私が欠けていることを_pollありますか?
何か不足していますか?私はPython3.6、Windows、PyCharmでデバッグを使用しています。私はすべてのパスを辿り、標準のマルチプロセッシングパスに入っています。私は助けやアドバイスを感謝します。ありがとう!
EDIT:PipeConnectionは、実際に 'poll'メソッドを持つ_ConnectionBaseのサブクラスで、デフォルトのタイムアウトパラメータでバインドされていることがわかります。
そこで質問です:SimpleQueueの初期化と
self._poll = self._reader.poll
なぜそれが_ConnectionBaseからそれをつかむためにクラス階層を上がるしないを設定している場合は?