سؤال

فقط بالنسبة للمبتدئين، استخدمت ملتوية ومقطوعة Socketserver مع كل من forkmixin، threadmixin وحاولت recepies "تجمع الخيط".

ومع ذلك، أردت أن أجعل شيئا خاصا يعمل في بيثون.

خلفية قليلة. لقد كتبت سابقا في C. Deamon TCP بسيطة من شأنها أن ترتبط بمقبس وتستمع إليه، ثم Formk X مرات عديدة، ثم اجتياز Herversocket Desc لجميع الشوك والجميع يقبلون العملاء للغاية.

لقد راجعت Asyncore "تحديد / استطلاع" الذي أعجبني كثيرا. كان لحم البقر الوحيد الذي يمكنني أن أحصل على وحدة المعالجة المركزية الصغيرة غير من غير منضم من خلال إجبار عدة مرات للاستفادة من آلة المعالجة المركزية متعددة الأمل والأمل في الأفضل مع الجدولة.

لا أستطيع أن نجعلها تعمل من أجل حياة لي. فقط 1 مثيل واحد فقط يمكن أن يقبل الاتصالات، كل الآخرين يرمون فقط استثناء في التعامل مع الاتصال، "لا يمكن التكرار من خلال فارغة".

هل هذا ممكن؟ راجعت الكثير، لكنني لم أستطع العثور على أي رمز للإشعاع المرسلات Asyncore (البكاء)

شكرا لك!

تحديث 1: (Traceback الكامل حسب الطلب)

error: uncaptured python exception, closing channel <__main__.EchoServer listening 0.0.0.0:8001 at 0x2ad4880c93f8> (<type 'exceptions.TypeError'>:'NoneType' /python2.6/asyncore.py|readwrite|99] [/usr/local/python2.6.9/lib/python2.6/asyncore.py|handle_read_event|408] [./6py-server.py|handle_accept|87])

يحدث دائما في قبول، بغض النظر عما إذا كنت شوكة قبل Asyncore.loop، إلخ.

تحديث 2: (مصدر كامل) مصدر pastebined

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

المحلول

يجب عليك استخدام ترميز التعليمات البرمجية ل Traceback، وإلا فهو عرض مرساة ولا ترى نوع الاستثناء.

لكنني أعتقد أنه TypeError: 'NoneType' object is not iterable حيث self.accept() يمكن العودة None. وبعد السبب هو أن العديد من العمليات يمكن أن تحصل على حدث قراءة للمقبس الاستماع، ولكن يمكن للمرء فقط قبوله. سوف تحصل على عمليات الباقي EWOULDBLOCK الخطأ الذي يتم القبض عليه، ولكن بعد ذلك يعود None بدلا من زوج عنوان الاتصال.

تغيير الخاص بك handle_accept() للعودة على الفور عندما accept() عائدات None.

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