هل هناك حاجة إلى قائمة انتظار Python لدفق البايت البسيط بين سلاسل الرسائل؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

لدي مؤشر ترابط بسيط يلتقط وحدات البايت من مقبس Bluetooth RFCOMM (يشبه المنفذ التسلسلي) ويفرغها في Queue.Queue (FIFO)، والتي تبدو وكأنها الطريقة النموذجية لتبادل البيانات بين سلاسل العمليات.يعمل بشكل جيد.

هل هذه مبالغة بالرغم من ذلك؟هل يمكنني فقط استخدام bytearray ثم الحصول على موضوع القارئ الخاص بي .append(somebyte) وظيفة المعالجة فقط .pop(0)؟لست متأكدًا مما إذا كانت الحماية في قائمة الانتظار مخصصة لـ "قوائم الانتظار متعددة المنتجين والمستهلكين" الأكثر تعقيدًا وإهدار دفق البايت من نقطة إلى نقطة.إن القيام بأشياء مثل مسح قائمة الانتظار أو الاستيلاء على وحدات بايت متعددة يبدو أكثر صعوبة مع قائمة الانتظار مقابل قائمة الانتظار.نوع بيانات أبسط.

أعتقد أن الإجابة قد تكون لها علاقة بـ if .pop() هو ذري، لكن هل سيكون له أي أهمية إذن؟...

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

المحلول

مع Queue, ، أنت على مضمون لتكون مؤشرات الترابط في أي تنفيذ ونسخة من بيثون. إن الاعتماد على هذا أو تلك الطريقة لبعض الكائنات الأخرى "ذرية" (في تنفيذ ونسخة معينة) عادة ما يتركك تحت رحمة هذا "الذرة" لا يمثل ضمانًا قويًا (مجرد قطعة أثرية للتنفيذ لإصدار النقطة المحددة & C "إعادة استخدام) وبالتالي فإن ظروف السباق الدقيقة التي يصعب تقديمها يتم تقديمها مع أي ترقية أو منفذ إلى تطبيقات Python الأخرى.

إذا أخبرك التنميط الخاص بك ذلك Queueإن الضمانات القوية والعامة هي عنق الزجاجة لحالة استخدامك المحددة للمستهلكين والمستهلكين ، وجعل قائمة انتظار/تيار/دفق FIFO الأكثر بساطة. على سبيل المثال ، إذا اكتشفت ذلك (صافي من ظروف السباق) append و pop سيكون مثاليًا لاستخدامك ، فقط قم بعمل فصل يحمي كل منهما عن طريق الحصول على/إصدار (استخدم أ with بيان) -- Queue يضيف النفقات العامة الصغيرة لدعم العديد من المنتجين والمستهلكين ويمكنك حلق تلك القلائل النانوية النانوية!-)

نصائح أخرى

نعم، pop() أمر ذري، لكنني سألتزم بقائمة الانتظار إذا لم يكن الأداء مهمًا للغاية.

إذا كان معدل الإدخال سريعًا بما فيه الكفاية ، فيمكنك دائمًا تخزين البايتات في سلسلة قبل دفع ذلك إلى قائمة الانتظار. من المحتمل أن يزيد ذلك من الإنتاجية عن طريق تقليل كمية القفل المنجزة ، على حساب زمن قدر إضافي قليل على الطرف المتلقي.

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