ما هي أفضل طريقة للشوكة/الخيط في PHP على Win؟
-
03-07-2019 - |
سؤال
لدي برنامج نصي 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
لا يعمل
set_time_limit(0);