PDA

View Full Version : سوال: مکث چند ثانیه ای در حلقه ...



thacker
شنبه 29 شهریور 1393, 17:20 عصر
با سلام...
میخوام توی یک حلقه بعد از هر 30 بار اجرا ، عملیات به مدت 20 ثانیه متوقف بشه و بعد از اینکه 20 ثانیه تموم شده ادامه کار صورت بگیره ...
با تشکر

2undercover
شنبه 29 شهریور 1393, 17:25 عصر
$i = 0;
while (true) {
++$i;
// Do something
if ($i % 30 == 0) {
$i = 0;
sleep(20);
}
}


اگر تابع sleep کار نکرد از usleep استفاده کنید (البته usleep با میکرو ثانیه کار می کنه در نتیجه 20 ثانیه باید ضربدر یک میلیون بشه).

thacker
شنبه 29 شهریور 1393, 18:18 عصر
تشکر ...
من یک حلقه بزرگ رو دارم اجرا میکنم اما با مشکل Request Timeout مواجه میشم ... برای جلوگیری از این مشکل چیکار باید بکنم ؟
این حلقه حدودا 1100 بار باید اجرا بشه تا تموم شه اما به 40 یا 50 که میرسه سرور خطا میده...

Unique
شنبه 29 شهریور 1393, 19:24 عصر
set_time_limit را باید ست کنی ! اما چون shared hosting ها روی safe mode هستند جواب نمیده. همون ۳۰ ثانیه هستش.
کلا php برای چنین کار هایی نیست (نظر من) و اصولا روی shared hosting ها چنین پردازش هایی نباید انجام داد.

thacker
یک شنبه 30 شهریور 1393, 00:07 صبح
راهی نیست که بشه مثلا 20 ثانیه حلقه فعال باشه بعد صفحه رفرش بشه و ادامش انجام بشه ؟
یا جور دیگه ای این کار رو روی هاست اشتراکی انجام داد ؟

bagherok
یک شنبه 30 شهریور 1393, 01:49 صبح
این حلقه قراره چیکارکنه.
خوب نتیجه با شمارنده حلقه رو پست کنید به همین صفحه و حلقه رو ادامه بدید

thacker
یک شنبه 30 شهریور 1393, 02:53 صبح
یه لیست 1100 تایی از اسم فیلم هست که قراره اسکریپت اطلاعات این فیلم ها رو از IMDB بگیره و توی دیتابیس ذخیره کنه ...
حدودا 50 تا فیلم اول رو که ذخیره میکنه سرور ارور تایم اوت میده ...

Mohammadsgh
یک شنبه 30 شهریور 1393, 09:50 صبح
$i = 0;
while (true) {
++$i;
// Do something
if ($i % 30 == 0) {
$i = 0;
sleep(20);
}
}


اگر تابع sleep کار نکرد از usleep استفاده کنید (البته usleep با میکرو ثانیه کار می کنه در نتیجه 20 ثانیه باید ضربدر یک میلیون بشه).
من چند ماه پیش از این روش استفاده کردم نشد

Mohammadsgh
یک شنبه 30 شهریور 1393, 10:05 صبح
در این مورد یه جستجویی کرده بودم به cron jobs رسیدم:لبخندساده:

alireza.stack
یک شنبه 30 شهریور 1393, 10:13 صبح
میتونید داده ها رو بصورت Batch تو یک جدول موقت ذخیره کنید بعد از هر ۳۰ رکورد یکبار به خود صفحه ریدایرکت شید و تو سشن مقدار آخر را داشته باشید و کل داده های مورد نیاز رو به این طریق تو بانک ذخیره کنید بعد با کران از اون جدول بخونید در هر بار ۳۰ الی ۴۰ رکورد از جدول بردار و اونا رو پاک کن. این توالی رو به این صورت انجام بده خیلی بهتر هست.