سؤال

لدي برنامج نصي PHP يتحقق من التحديثات على العديد من (الآلاف) من المواقع.في بعض الأحيان (في كثير من الأحيان مع زيادة عدد المواقع)، أحصل على مهلة تنفيذ عند تحديث أحد هذه المواقع، ويذهب البرنامج النصي بأكمله هباءً.

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

فكرت في استخدام الضفيرة كآلية للتفرع، لكن ألن يكون ذلك أكثر تكلفة للخادم (من حيث الوقت وقوة المعالجة)؟

سأكون سعيدًا لسماع بعض الأفكار والخبرات حول التشعب/الترابط PHP...

شكرا ، عمر.

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

المحلول 5

حسنا، في نهاية ذهبت لحليقة، وأنه يعمل على ما يرام.

وأنا في حاجة إلى حل عبر منصة، وأطور على ماك بينما في هذه الحالة سيرير الإنتاج ويندوز. وكان ذلك يعني pcntl غير وارد.

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

وفعلت، ومع ذلك، فقد لإضافة set_time_limit(0) إلى البرنامج النصي الذي يبدأ جميع المكالمات حليقة، وإلا فإنه مجرد انقضاء المهلة.

نصائح أخرى

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

ولكن نعم، في نهاية المطاف سوف تصل الى القضايا وعدم وجود دعم موضوع كامل في PHP. لذلك أفضل رهان هو أن ننظر إلى بدائل أخرى، على سبيل المثال لغات أخرى / المنصات التي تقدم الدعم خيوط الأصلي.

تمكنت من الحصول على شكل ما من أشكال الترابط في لغة php باستخدام ملحق pcntl. لم يكن هذا أفضل الحلول ولكنه أدى المهمة.

http://www.php.net/manual/en/ref.pcntl.php

جرب الروابط التالية أيضًا، فقد أعطتني فكرة عن كيفية البدء في التنفيذ.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process-forking/

آمل أن يكون هذا مفيدًا، لكن لغة php ليست جيدة جدًا في التعامل مع الخيوط.

هل يمكن تعيين INI التوجيه max_execution_time ل0. هذا يجب إزالة وقت التنفيذ كحد أقصى، والسماح للالنصي لتشغيل دون تكبد هذا الخطأ. هذه القيمة التي سيتم تحديدها في ملف php.ini الخاص بك ولكن - باستخدام ini_set لا يعمل

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