نحوه اجرای foreach به صورت موازی
سلام
با یک مشکل بزرگی مواجه شدم جستجو کردم به این نتیجه رسیدم که باید به صورت موازی عمل کنه برنامه در foreach که وقتی به این قسمت میرسه به علت تعداد زیاد کاربر این عمل یک ساعت طول میکشه
و تا عمل فوق تمام نشه برنامه کار نمیکنه تا عمل خوق به اتمام برسه حالا میخواستم یک کاری کنم به صورت موازی کار کنه
من دستور سلام را می فرستم به برنامه برنامه از طریق حلقه foreach شروع میکنه به 2000 تا کاربر پیام سلام را می فرستد این عمل یک ساعت طول میکشه حالا اگر در این میاد دستور خوب هستید رو هم بفرستم عمل نمیکنه چون دستور سلام در حال اجرا است میخواستم عملیات foreach به صورت موازی عمل کنه چی کار باید بکنم مقداری سرچ و جستجو کردم دیدم که برای حل این مشکل باید به صورت موازی foreach عمل کنه در این صورت 100 تا دستور هم بفرستم همزمان به فانکشل foreach عمل میکنه
دوستان برای این مشکل نمونه کد چیزی دارید که بتوانم روش کار کنم
نقل قول: نحوه اجرای foreach به صورت موازی
سلام و روز خوش
این پرسشی که مطرح کردین پیچیده و پیشرفته است.
چیزهایی هست که باید به اونها واقعا مسلط باشین و مکانیسم کار رو بدونین:
cron job ، curl ،
parallel processing (که با multi-threading متفاوت هست).
همچنین باید مشخص باشه این پیام (ایمیل؟) چه جوری ارسال میشه،
ممکنه خود سرویس یا اکستنشنی که استفاده میکنین ارسال همزمان رو پشتیبانی کنه.
نمونه کد وقتی میشه گفت که کد شما هم پیوست باشه (کد دقیق)،
همچنین ممکنه شما نمونه کدی پیدا کنین که برای سرور ویندوزی باشه و روی سرور لینوکس کار نکنه!
برای همین اگر این یک پروژه واقعی هست و شما هم به این مباحث تسلط کافی ندارین بهتره که اون رو برون سپاری کنین.
چون برای پیشنهاد یک پاسخ و روش مناسب و همچنین پیاده سازی اون،
نیاز هست که همه ابعاد و جوانب کار مشخص باشه.
ولی اگر قصد یادگیری دارین برای شروع و به عنوان راهنمایی میشه گفت که یک روتین جداگانه برای ارسال پیام مینویسین که:
آدرس(های) گیرنده(ها)، body و subject رو به عنوان پارامتر بگیره،
و در foreach این پروسه رو با popen (یا بهتر proc_open) سدا بزنین و یک pipe درست کنین.
در نظر داشته باشین که این فقط یک راه ممکن هست و همین هم به شکل های مختلفی میشه پیاده اش کرد.
نقل قول: نحوه اجرای foreach به صورت موازی
نقل قول:
نوشته شده توسط
mazoolagh
سلام و روز خوش
این پرسشی که مطرح کردین پیچیده و پیشرفته است.
چیزهایی هست که باید به اونها واقعا مسلط باشین و مکانیسم کار رو بدونین:
cron job ، curl ،
parallel processing (که با multi-threading متفاوت هست).
همچنین باید مشخص باشه این پیام (ایمیل؟) چه جوری ارسال میشه،
ممکنه خود سرویس یا اکستنشنی که استفاده میکنین ارسال همزمان رو پشتیبانی کنه.
نمونه کد وقتی میشه گفت که کد شما هم پیوست باشه (کد دقیق)،
همچنین ممکنه شما نمونه کدی پیدا کنین که برای سرور ویندوزی باشه و روی سرور لینوکس کار نکنه!
برای همین اگر این یک پروژه واقعی هست و شما هم به این مباحث تسلط کافی ندارین بهتره که اون رو برون سپاری کنین.
چون برای پیشنهاد یک پاسخ و روش مناسب و همچنین پیاده سازی اون،
نیاز هست که همه ابعاد و جوانب کار مشخص باشه.
ولی اگر قصد یادگیری دارین برای شروع و به عنوان راهنمایی میشه گفت که یک روتین جداگانه برای ارسال پیام مینویسین که:
آدرس(های) گیرنده(ها)، body و subject رو به عنوان پارامتر بگیره،
و در foreach این پروسه رو با popen (یا بهتر proc_open) سدا بزنین و یک pipe درست کنین.
در نظر داشته باشین که این فقط یک راه ممکن هست و همین هم به شکل های مختلفی میشه پیاده اش کرد.
ممنون از راهنمائی شما
من یک نمونه کد واسه این پیدا کردم
<?php
declare(ticks = 1);
$filesArray = [ 'file-0', 'file-1', 'file-2', 'file-3', 'file-4', 'file-5', 'file-6', 'file-7', 'file-8', 'file-9',];
$maxThreads = 3;
$child = 1;
pcntl_signal(SIGCHLD, function ($signo) { global $child; if ($signo === SIGCLD) { while (($pid = pcntl_wait($signo, WNOHANG)) > 0) { $signal = pcntl_wexitstatus($signo); $child--; } }});
foreach ($filesArray as $item) {
while ($child >= $maxThreads) {
sleep(1); }
$child++; $pid = pcntl_fork();
if ($pid) {
} else {
// Here your stuff.
sleep(2);
print_r( posix_getpid()." - $item \n");
exit(0);
}}while ($child != 0) {
sleep(3);}
ولی نمیدونم چرا کار نمیکند دوستان راهنمایی میکنند بتونیم تکمیلش کنیم
دوستان اگر کسی انجام می دهد برای من لطفا اعلام کنند تا زحمتش رذا بهش بدیم هزینه رو هم پرداخت میکنیم
نقل قول: نحوه اجرای foreach به صورت موازی
کدهایی رو که با جستجو (یا کمک از هوش ساختگی) پیدا میکنین،
ممکنه نیاز به یک سری کتابخانه و پلاگین و اکستنشن داشته باشه.
این نمونه کد هم بر مبنای اکستنشن posix هست.
اینجا یک انجمن آموزشی هست و مناسب برای پروژه دادن نیست،
هم وقت و هم پول شما هدر میشه.
اینجا (و مشابه) اگر کسی در پیام خصوصی به شما پیشنهاد انجام کار در برابر پول کرد قطعا سرتون کلاه میره.
در سایت های فریلنسری مثل پونیشا و پارس کدرز و ... مطرح کنین (دقیق):
اونها هم مکانیسم خوبی برای حفاظت از منافع طرفین دارن،
هم زمان و هزینه مشخص هست،
هم سابقه کار مجری ها رو میتونین چک کنین،
و هم به دلیل رقابتی بودن قیمتی که پیشنهاد میدن واقعی(تر) هست.