نمایش نتایج 1 تا 4 از 4

نام تاپیک: نحوه اجرای foreach به صورت موازی

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1388
    پست
    56

    نحوه اجرای foreach به صورت موازی

    سلام
    با یک مشکل بزرگی مواجه شدم جستجو کردم به این نتیجه رسیدم که باید به صورت موازی عمل کنه برنامه در foreach که وقتی به این قسمت میرسه به علت تعداد زیاد کاربر این عمل یک ساعت طول میکشه

    و تا عمل فوق تمام نشه برنامه کار نمیکنه تا عمل خوق به اتمام برسه حالا میخواستم یک کاری کنم به صورت موازی کار کنه

    من دستور سلام را می فرستم به برنامه برنامه از طریق حلقه foreach شروع میکنه به 2000 تا کاربر پیام سلام را می فرستد این عمل یک ساعت طول میکشه حالا اگر در این میاد دستور خوب هستید رو هم بفرستم عمل نمیکنه چون دستور سلام در حال اجرا است میخواستم عملیات foreach به صورت موازی عمل کنه چی کار باید بکنم مقداری سرچ و جستجو کردم دیدم که برای حل این مشکل باید به صورت موازی foreach عمل کنه در این صورت 100 تا دستور هم بفرستم همزمان به فانکشل foreach عمل میکنه

    دوستان برای این مشکل نمونه کد چیزی دارید که بتوانم روش کار کنم






  2. #2
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,129

    نقل قول: نحوه اجرای foreach به صورت موازی

    سلام و روز خوش

    این پرسشی که مطرح کردین پیچیده و پیشرفته است.
    چیزهایی هست که باید به اونها واقعا مسلط باشین و مکانیسم کار رو بدونین:
    cron job ، curl ،
    parallel processing (که با multi-threading متفاوت هست).

    همچنین باید مشخص باشه این پیام (ایمیل؟) چه جوری ارسال میشه،
    ممکنه خود سرویس یا اکستنشنی که استفاده میکنین ارسال همزمان رو پشتیبانی کنه.

    نمونه کد وقتی میشه گفت که کد شما هم پیوست باشه (کد دقیق)،
    همچنین ممکنه شما نمونه کدی پیدا کنین که برای سرور ویندوزی باشه و روی سرور لینوکس کار نکنه!
    برای همین اگر این یک پروژه واقعی هست و شما هم به این مباحث تسلط کافی ندارین بهتره که اون رو برون سپاری کنین.
    چون برای پیشنهاد یک پاسخ و روش مناسب و همچنین پیاده سازی اون،
    نیاز هست که همه ابعاد و جوانب کار مشخص باشه.

    ولی اگر قصد یادگیری دارین برای شروع و به عنوان راهنمایی میشه گفت که یک روتین جداگانه برای ارسال پیام مینویسین که:
    آدرس(های) گیرنده(ها)، body و subject رو به عنوان پارامتر بگیره،
    و در foreach این پروسه رو با popen (یا بهتر proc_open) سدا بزنین و یک pipe درست کنین.

    در نظر داشته باشین که این فقط یک راه ممکن هست و همین هم به شکل های مختلفی میشه پیاده اش کرد.

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1388
    پست
    56

    نقل قول: نحوه اجرای 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);}




    ولی نمیدونم چرا کار نمیکند دوستان راهنمایی میکنند بتونیم تکمیلش کنیم

    دوستان اگر کسی انجام می دهد برای من لطفا اعلام کنند تا زحمتش رذا بهش بدیم هزینه رو هم پرداخت میکنیم

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,129

    نقل قول: نحوه اجرای foreach به صورت موازی

    کدهایی رو که با جستجو (یا کمک از هوش ساختگی) پیدا میکنین،
    ممکنه نیاز به یک سری کتابخانه و پلاگین و اکستنشن داشته باشه.
    این نمونه کد هم بر مبنای اکستنشن posix هست.

    اینجا یک انجمن آموزشی هست و مناسب برای پروژه دادن نیست،
    هم وقت و هم پول شما هدر میشه.
    اینجا (و مشابه) اگر کسی در پیام خصوصی به شما پیشنهاد انجام کار در برابر پول کرد قطعا سرتون کلاه میره.

    در سایت های فریلنسری مثل پونیشا و پارس کدرز و ... مطرح کنین (دقیق):
    اونها هم مکانیسم خوبی برای حفاظت از منافع طرفین دارن،
    هم زمان و هزینه مشخص هست،
    هم سابقه کار مجری ها رو میتونین چک کنین،
    و هم به دلیل رقابتی بودن قیمتی که پیشنهاد میدن واقعی(تر) هست.

تاپیک های مشابه

  1. پاسخ: 9
    آخرین پست: شنبه 24 آبان 1393, 08:30 صبح
  2. ذخیره سازی داده ها foreach در دیتابیس
    نوشته شده توسط tazeha در بخش MySQL
    پاسخ: 2
    آخرین پست: شنبه 04 مرداد 1393, 08:46 صبح
  3. پاسخ: 1
    آخرین پست: سه شنبه 23 شهریور 1389, 13:46 عصر
  4. گفتگو: مقایسه کارایی foreach نسبت به ForEach
    نوشته شده توسط Rezaoli در بخش C#‎‎
    پاسخ: 1
    آخرین پست: پنج شنبه 08 اسفند 1387, 11:37 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •