1. برمجة
3

كمبرمج - كيف تقطع عمل function إن تجاوزت مدت عملها 30 ثانية وتكمل تنفيذ الأكواد التى تليها ؟!

  • tefaloveallah
  • 2014-11-09T15:48:59+00:00
  • رابط مختصر
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

  • الأفضل
  • الأحدث
  • الأقدم
5
khaledez 2014-11-09T20:40:58+00:00 أضف ردا
  • رابط مختصر

عليك أن تغير من طريقة تفكيرك لحل مثل هذا النوع من المشاكل.

واضع أنك تحتاج Multi-threading أو Asynchronous Programming لحل هذه المشكلة

PHP بطبيعتها لا تدعم تعدد الخيوط (MultiThreading) إلا عن طريق إضافة خاصة

http://php.net/manual/en/bo...

قم بوضع الكود الذي يأخذ وقتاً طويلاً في Thread خاص به، وضع عليه مؤقتاً Timer.

أما إذا لم يكن لديك وصول لتركيب هذه الإضافة، فعليك تغيير لغة البرمجة، إلى Java أو Python مثلاً

2
mohamed binothman 2014-11-09T20:55:25+00:00 أضف ردا
  • رابط مختصر

خطر في بالي السيناريو التالي :

  • تفتح جلسة session وفي السطر قبل الدالة تسند القيمة on لمتغير ما على الجلسة.

  • تنفذ الدالة بداخل Thread لكن في نهاية كود الدالة تغير قيمة الجلسة الى off.

  • في السطر مابعد الدالة تعمل sleep لـ 30 ثانية.

  • في السطر بعد sleep تعمل شرط اذا كانت الجلسة قيمتها on تعمل kill للـ Thread.

  • ثم تنفذ باقي الاكواد.

ممكن تستعين بهذه المكتبة في موضوع الـ Thread.

1
supercoder 2014-11-09T16:47:42+00:00 أضف ردا
  • رابط مختصر

سؤالك غير واضح باي لغة تعمل وهل ممكن مثال علي ما تريد ؟

0
tefaloveallah 2014-11-09T16:56:40+00:00 أضف ردا
  • رابط مختصر

لو كان عندك ملف فية 10 دوال مثلاً

وهناك دالة فيهم ربما تأخذ وقت فى التنفيذ 60 ثانية وأنت لا تريد أن تتجاوز هذة الدالة مثلاً ال 30 ثانية

وتريد أن تغلق عمل الدالة أو تتجاوزها بعد ال 30 ثانية

أو بمعنى آخر أعطاء وقت معين للتنفيذ فى أحد اجزاء ملف ال php

0
supercoder 2014-11-09T16:59:13+00:00 أضف ردا
  • رابط مختصر

تفضل

http://stackoverflow.com/qu...
1
tefaloveallah 2014-11-09T17:09:27+00:00 أضف ردا
  • رابط مختصر

شكراً لك

أنا مريت على المواضع دى فعلياً أشكرك مرة أخرى لكن المشكلة لو أن حلقة التكرار مثلا التى تأخذ 60 ثانية تأتى قبل هذا الكود

if ((time() - $start_time) > 300) {

فى راى أفضل حل أن تكون الدالة فى ملف آخر ويتم إرسال البيانات لها POST مع تحديد وقت 30 ثانية

http://stackoverflow.com/qu...

لكنى أبحث عن حل أقرب

1
billal em 2014-11-09T20:41:29+00:00 أضف ردا
  • رابط مختصر

نعم أخي هذا هو أفضل حل ,

الفكرة هي عمل شيء مشابه لطريقة البرمجة asynchronous للموجود في javascript

كنت أبحث عن هذا الموضوع منذ بضعت أيام , وجدت هذا المقال [1] الذي يتحدث عن كل الطرق الممكنة لعمل ذلك وأفضلها .

[1]

https://segment.com/blog/ho...
1
khashabawy 2014-11-10T04:54:57+00:00 أضف ردا
  • رابط مختصر

طالما أن السيرفر الخاص بك لا يمكنه معالجة البيانات فى خلال فترة زمنية قصيرة فأنت يجب أن تحترم حدود السيرفر ولا ترهقه بدوال تجعله overloaded

إعمل على تقليل ما تستهلكه الدالة و تقسيم عملها على عدة مراحل و إسنادها إلى ال Cron jobs

من الممكن كذلك تقسيم أعمالك عبر عدة سيرفرات و بناء API على أحدهم يقوم بتوزيع ال Load عليهم

فمثلاً يقوم السيرفر رقم A بإستعلام عن 100 Row و تقوم بإرسال 50 منهم إلى سيرفر B و 50 إلى سيرفر C .. ثم تلتقط الناتج منهم بعد إنتهاء المعالجة

تحياتى

0
tefaloveallah 2014-11-10T14:12:54+00:00 أضف ردا
  • رابط مختصر

لأ مش موضوع سيرفر أو أرهاق

المشكلة دى حصلت معايا فى برنامج خاص بالنظم الخبيرة والمفترض هيشارك فية أكثر من مبرمج وكل مبرمج له اكواده الخاصة

فمش عايز كود لأى مبرمج يتجاوز فترة زمنية معينة هو دا كل ما فى الموضوع

1
abdulaziz noor 2014-11-10T06:03:47+00:00 أضف ردا
  • رابط مختصر

ان كنت تقصد لغة ال PHP

يوجد اضافة لل PHP لدعم ال

Event-driven, non-blocking I/O

وهو ان شاءالله ماتبحث عنه

http://reactphp.org

برمجة

مجتمع للمبرمجين من جميع المستويات لتبادل المعرفة والخبرات. ناقش لغات البرمجة المختلفة، الحلول البرمجية، والمشاريع.

25.7 ألف متابع

أطلق موقعك الإلكتروني في دقائق

صمم موقعك كاملا بالسحب والإفلات بدون خبرة برمجية، واحجز مكانك على الإنترنت.

أنشئ موقعك الآن

اقرأ أيضًا

  • كيف اتعلم البرمجة
  • مشكلات تواجهنا كمبرمجين في تطوير التطبيقات
  • كم كان اول راتب لك كمبرمج ؟
  • ما الفرق بين method و function
  • أتمتة العمل على سطح المكتب

انسخ هذا الرابط:

تنبيه