سؤال

أنا أبحث في تنفيذ وحدة تحكم منطق غامض بناء على مكتبات Pyfuzzy (بيثون) أو FFLL (C ++).

أفضل أن أعمل مع بيثون، لكنني غير متأكد إذا كان الأداء مقبولا في البيئة المضمنة، وسيعمل في (إما ذراع أو x86 proc كلاهما حوالي 64 ميغابايت من ذاكرة الوصول العشوائي).

القلق الرئيسي هو أن أوقات الاستجابة أسرع وقت ممكن (معدل التحديث 5 هرتز + سيكون مثاليا> 2 هرتز مطلوب). سيقرأ النظام من أجهزة استشعار متعددة (ربما 5) من منفذ RS232 وتوفير مخرجات 2/3 استنادا إلى نتائج التقييم الغامض.

يجب أن أشعر بالقلق لأن بيثون سيكون بطيئا للغاية بالنسبة لهذه المهمة؟

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

المحلول

بشكل عام، يجب ألا تسي على الأداء حتى ترى بالفعل مشكلة. نظرا لأننا لا نعرف تفاصيل تطبيقك، فإننا لا نستطيع أن نقول كيف ينبغي أن تؤدي إذا تم تنفيذها في بيثون. وبما أنك لم تنفذها بعد، لا يمكنك ذلك.

قم بتنفيذ الإصدار الذي تشعر به أكثر راحة معه، ويمكنه تطبيق الأسرع أولا. ثم معيار ذلك. و لو إنه بطيء جدا، لديك ثلاثة خيارات يجب القيام بها من أجل:

  • أولا، تحسين رمز Python الخاص بك
  • إذا لم يكن هذا كافيا، فاكتب الدالات الأكثر أهمية في الأداء في C / C ++، واتصل بذلك من رمز Python الخاص بك
  • وأخيرا، إذا كنت هل حقا تحتاج إلى أداء أعلى، قد تضطر إلى إعادة كتابة كل شيء في C ++. ولكن بعد ذلك، سيكون لديك نموذج أولي في Python، ولديك فكرة أكثر وضوحا عن كيفية تنفيذها. ستعرف ما تتجنب المزالق، ولديك تنفيذ صحيح بالفعل لاختباره ومقارنة النتائج إليه.

نصائح أخرى

بيثون بطيء جدا في التعامل مع كميات كبيرة من البيانات غير السلسلة. بالنسبة لبعض العمليات، قد ترى أنه أبطأ 1000 مرة من C / C ++، لذلك نعم، يجب عليك التحقيق في هذا الأمر وفعل المعايير اللازمة قبل إجراء خوارزميات حاسمة من الوقت في بيثون.

ومع ذلك، يمكنك تمديد Python مع وحدات في كود C / C ++، بحيث تكون الأمور المهمة الزمنية سريعة، بينما لا تزال قادرا على استخدام Python للرمز الرئيسي.

اجعلها تعمل، ثم اجعلها تعمل بسرعة.

إذا تم إنفاق معظم وقت التشغيل الخاص بك في مكتبات C، فإن اللغة التي تستخدمها لاستدعاء هذه المكتبات ليست مهمة. ما هي اللغة التي تكتب فيها مكتبات تناولها الوقت؟

من الوصف الخاص بك، لا ينبغي أن تكون السرعة الكثير من القلق (ويمكنك استخدام C، Cython، مهما كنت تريد أن تجعلها أسرع)، ولكن الذاكرة ستكون. بالنسبة للبيئات التي تحتوي على 64 ميغابايت كحد أقصى (حيث يجب أن يصلح نظام التشغيل وكل شيء أيضا، أليس كذلك؟)، أعتقد أن هناك فرصة جيدة لأن Python قد لا تكون الأداة المناسبة للنشر المستهدف.

إذا كان لديك منطق غير تافهة للتعامل معه، فسأظل النموذج الأولي في بيثون.

لم أقم أبدا بأداء أمثلة Pyfuzzy، ولكن كما يمكن للإصدار الجديد 0.1.0 قراءة ملفات FCL كما يفعل FFLL. ما عليك سوى وصف نظامك الضبابي بهذا الشكل، واكتب بعض الأغلفة، والتحقق من أداء كل من المتغيرات.

لقراءة FCL مع PyFuzzy، فأنت بحاجة إلى وقت تشغيل Antlr Python، ولكن بعد القراءة، يجب أن تكون قادرا على إخلاء كائن القراءة، لذلك لا تحتاج إلى النفقات العامة لمكافحة Antlr على الهدف.

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