كيف يمكنني مقاطعة ماتلاب عندما يصبح مشغولا حقا؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أشغل محاكاة طويلة في matlab. أنني أدركت أنني بحاجة إلى التوقف وأعدت. ومع ذلك، MATLAB هو في الحقيقة في هذا الحساب، وتوقف عن الاستجابة. كيف يمكنني مقاطعة هذا المدى دون قتل matlab؟

(أدرك أن هذه مشكلة في العديد من برامج Windows، لكنها حادة حقا مع MATLAB.)

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

المحلول

انتقل إلى نافذة الأوامر، وضرب Ctrl-C كثيرا. من تجربتي، على آلة واحدة النواة، ليس لديك فرصة، ما لم تفعل الكثير من الإخراج. على آلة متعددة النواة أو متعددة المعالجات، من المحتمل أن تتوقف عن ذلك في النهاية، لكنها تستغرق بعض الوقت.

أنظر أيضا http://www.mathworks.com/support/solutions/en/data/1-188vx/index.html.

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

نصائح أخرى

إلى أي مدى يستجيب Matlab على CTRL-C بدلا من ذلك على ما يفعله. إذا كان ذلك في منتصف مكالمة Blas أو Lapack على سبيل المثال، فلن يستجيب حتى تتم إرجاع المكالمات. إذا كنت في كتلة من التعليمات البرمجية حيث يتم تنفيذ الكثير من خطوط MATLAB، يمكنك توقع أن تكون CTRL-C أكثر استجابة.

لقد حصلت على خدعة بسيطة للغاية للتوقف مؤقتا (أو إيقاف) تنفيذ غير مستجيب. إذا كانت المحاكاة قيد التشغيل حلقة طويلة أقوم بها دائما ما يلي:

for ii = 1:N
   do_stuff();
   clear empty_script;
   empty_script;
end

ثم إنشاء ملف empty_script.m تحتوي على ما يلي:

%keyboard

كلما أرغب في إيقاف الإعدام، أفتح محرر نصوص خارجي وإلغاء قول الخط keyboard في empty_script.m. وبعد هذا يتركني في وضع تصحيح الأخطاء حيث يمكنني مشاهدة المتغيرات أو تعديل الأشياء أو حتى إيقاف البرنامج.

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

for ii = 1:N
do_stuff();
pause(0.1);
end

هذا يزيد من الفرص التي ستمنعها في الواقع.

يمكنك العثور على عملية MATLAB في إدارة مهام Windows وتعيين الأولوية على أنها عالية أو منخفضة والسماح للبرنامج الآخر بأولوية أقل أو أعلى. في تجربتي، إنها طريقة فعالة.

إذا كنت لن تتوقف وأعد تشغيلها، فالقتل غير سيء، فانتقل إلى إدارة مهام Windows-> العمليات ثم تغريم matlab.exe ودفع زر عملية النهاية

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