الثعبان كائن اتصال 2.6 الإرسال على قائمة الانتظار / أنابيب / الخ

StackOverflow https://stackoverflow.com/questions/1446004

سؤال

هذا الخطأ (بايثون العدد 4892) أن يؤدي إلى الخطأ التالي:

>>> import multiprocessing
>>> multiprocessing.allow_connection_pickling()
>>> q = multiprocessing.Queue()
>>> p = multiprocessing.Pipe()
>>> q.put(p)
>>> q.get()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File     "/.../python2.6/multiprocessing/queues.py", line 91, in get
    res = self._recv()
TypeError: Required argument 'handle' (pos 1) not found

لا أحد يعرف من الحل لتمرير كائن اتصال على قائمة الانتظار؟

وشكرا لكم.

هل كانت مفيدة؟

المحلول

و(ما أعتقد هو) وهناك طريقة أفضل، بعد بعض اللعب حولها (كنت أعاني من نفس المشكلة مطلوب لتمرير أنبوب من خلال أنبوب.) قبل اكتشاف هذا المنصب:

>>> from multiprocessing import Pipe, reduction
>>> i, o = Pipe()
>>> reduced = reduction.reduce_connection(i)
>>> newi = reduced[0](*reduced[1])
>>> newi.send("hi")
>>> o.recv()
'hi'

وأنا لست متأكدا تماما لماذا هذا هو مبني بهذه الطريقة (شخص ما من شأنه تحتاج نظرة ثاقبة ما هيك الجزء الحد من متعدد المعالجة حوالي لذلك) ولكنه بالتأكيد العمل، ويتطلب أي استيراد المخلل. بخلاف ذلك، انها قريبة جدا إلى ما سبق في ما تقوم به، ولكن أبسط. وأود أيضا أن ألقى هذا في تقرير الشوائب الثعبان بحيث الآخرين يعرفون من الحل.

نصائح أخرى

وهنا تقريبا ما فعلته:

# Producer
from multiprocessing.reduction import reduce_connection
from multiprocessing import Pipe

   # Producer and Consumer share the Queue we call queue
def handle(queue):
   reader, writer = Pipe()
   pickled_writer = pickle.dumps(reduce_connection(writer))
   queue.put(pickled_writer)

و

# Consumer
from multiprocessing.reduction import rebuild_connection

def wait_for_request():
    pickled_write = queue.get(block=True) # block=True isn't necessary, of course
    upw = pickle.loads(pickled_writer) # unpickled writer
    writer = upw[0](upw[1][0],upw[1][1],upw[1][2])

والسطر الأخير هو خفي، قادمة من ما يلي:

>>> upw
(<function rebuild_connection at 0x1005df140>,
(('/var/folders/.../pymp-VhT3wX/listener-FKMB0W',
17, False), True, True))

وعلى أمل أن يساعد شخص آخر. أنه يعمل بشكل جيد بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top