اولین قدم با کرفس

ساخت وبلاگ

کرفس یک صف کار با باتری های موجود است. استفاده از آن آسان است تا بتوانید بدون یادگیری پیچیدگی های کامل مشکلی که حل می کند ، شروع کنید. این کار در اطراف بهترین شیوه ها طراحی شده است تا محصول شما بتواند با سایر زبانها مقیاس و ادغام شود ، و با ابزارهایی و پشتیبانی مورد نیاز برای اجرای چنین سیستمی در تولید همراه است.

در این آموزش اصول اولیه استفاده از کرفس را یاد خواهید گرفت.

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

کرفس ممکن است در ابتدا دلهره آور به نظر برسد - اما نگران نباشید - این آموزش شما را در هیچ زمان شروع نمی کند. این عمداً ساده نگه داشته می شود ، تا شما را با ویژگی های پیشرفته اشتباه نگیرید. پس از اتمام این آموزش ، ایده خوبی است که مرور بقیه اسناد را مرور کنید. به عنوان مثال ، آموزش بعدی مراحل بعدی قابلیت های کرفس را به نمایش می گذارد.

  • انتخاب کارگزار
    • خرگوش
    • مجدداً
    • کارگزاران دیگر
    • کارگر شروع نمی کند: خطای اجازه
    • باکند نتیجه کار نمی کند یا وظایف همیشه در حالت انتظار هستند

    انتخاب یک کارگزار

    کرفس برای ارسال و دریافت پیام به راه حل نیاز دارد. معمولاً این به صورت یک سرویس جداگانه به نام کارگزار پیام ارائه می شود.

    چندین گزینه در دسترس است ، از جمله:

    RabbitMq¶

    RabbitMQ از ویژگی های کاملی ، پایدار ، بادوام و نصب آسان است. این یک انتخاب عالی برای یک محیط تولید است. اطلاعات دقیق در مورد استفاده از RabbitMQ با کرفس:

    اگر از اوبونتو یا Debian استفاده می کنید RabbitMQ را با اجرای این دستور نصب کنید:

    $sudo apt-get نصب خرگوش-سرور

    یا اگر می خواهید آن را در Docker اجرا کنید این را اجرا کنید:

    $docker ru n-d -p5672: 5672 RabbitMQ

    با اتمام فرمان ، کارگزار در حال اجرا در پس زمینه خواهد بود ، آماده انتقال پیام برای شما: شروع RabbitMQ-Server: Success.

    نگران نباشید اگر Ubuntu یا Debian را اجرا نمی کنید ، می توانید به این وب سایت بروید تا دستورالعمل های نصب مشابهی را برای سایر سیستم عامل ها ، از جمله Microsoft Windows پیدا کنید:

    ردیس

    Redis همچنین از ویژگی های کاملاً مناسب است ، اما در صورت خاتمه ناگهانی یا خرابی های قدرت نسبت به از دست دادن داده ها مستعد تر است. اطلاعات دقیق در مورد استفاده از Redis:

    اگر می خواهید آن را در Docker اجرا کنید این را اجرا کنید:

    $docker ru n-d -p6379: 6379 redis

    سایر کارگزاران

    علاوه بر موارد فوق ، اجرای حمل و نقل آزمایشی دیگری نیز وجود دارد که از جمله آمازون SQS انتخاب شده است.

    برای یک لیست کامل به نمای کلی کارگزار مراجعه کنید.

    نصب کرفس

    کرفس روی شاخص بسته Python (PYPI) است ، بنابراین می توان آن را با ابزارهای استاندارد پایتون مانند PIP یا Easy_install نصب کرد:

    $کرفس نصب پیپ

    کاربرد¶

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

    در این آموزش همه چیز را در یک ماژول واحد نگه می داریم ، اما برای پروژه های بزرگتر می خواهید یک ماژول اختصاصی ایجاد کنید.

    بیایید Tasks. Py را ایجاد کنیم:

    از جانب کرفس وارد كردن کرفس برنامه = کرفس("کارها", دلال='pyamqp: // مهمان@localhost //') APP.وظیفه دنباله اضافه کردن(x, y): برگشت x + y 

    اولین استدلال برای کرفس نام ماژول فعلی است. این فقط لازم است به گونه ای که وقتی وظایف در ماژول __main__ تعریف می شوند ، می توان نام ها را به طور خودکار تولید کرد.

    آرگومان دوم آرگومان کلیدی کارگزار است که URL کارگزار پیام را که می خواهید استفاده کنید ، مشخص می کند. در اینجا ما از RabbitMQ استفاده می کنیم (همچنین گزینه پیش فرض).

    برای انتخاب بیشتر یک کارگزار در بالا مراجعه کنید - برای RabbitMQ می توانید از Amqp: // localhost استفاده کنید ، یا برای Redis می توانید از redis: // localhost استفاده کنید.

    شما یک کار واحد به نام ADD را تعریف کرده اید و مبلغ دو شماره را برمی گردانید.

    اجرای سرور کارگر کرفس

    اکنون می توانید با اجرای برنامه ما با استدلال کارگر ، کارگر را اجرا کنید:

    $کرف س-A کرفس کارگرا ن-الگوئلول=اطلاعات

    اگر کارگر شروع نمی کند ، بخش عیب یابی را مشاهده کنید.

    در تولید می خواهید کارگر را در پس زمینه به عنوان یک Daemon اجرا کنید. برای انجام این کار باید از ابزارهای ارائه شده توسط پلت فرم خود یا مواردی مانند Supervisord استفاده کنید (برای اطلاعات بیشتر به Daemonization مراجعه کنید).

    برای لیست کامل گزینه های خط فرمان موجود ، انجام دهید:

    $کارگر کرف س-مارپیچ

    همچنین چندین دستور دیگر در دسترس است و کمک نیز در دسترس است:

    $کرفس

    تماس با کار

    برای تماس با کار ما می توانید از روش تأخیر () استفاده کنید.

    این یک میانبر مفید به روش Apply_Async () است که کنترل بیشتری در انجام کار انجام می دهد (به کارهای فراخوانی مراجعه کنید):

    >>> از جانب وظایف وارد كردن اضافه کردن >>> اضافه کردن.تاخیر انداختن(4, 4) 

    این کار اکنون توسط کارگر شما که قبلاً شروع کرده اید پردازش شده است. می توانید با نگاه کردن به خروجی کنسول کارگر ، این موضوع را تأیید کنید.

    فراخوانی یک کار یک نمونه asyncresult را برمی گرداند. این می تواند برای بررسی وضعیت کار استفاده شود ، منتظر بمانید تا کار تمام شود یا مقدار بازگشت آن را بدست آورید (یا اگر کار شکست خورده است ، استثناء و ردیابی را بدست آورید).

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

    نگه داشتن نتایج

    اگر می خواهید حالت های وظایف را پیگیری کنید ، کرفس نیاز به ذخیره یا ارسال ایالات را در جایی دارد. چندین باکتری نتیجه داخلی برای انتخاب وجود دارد: Sqlalchemy/Django ORM ، MongoDB ، Memcached ، Redis ، RPC (RabbitMQ/AMQP) ، و-یا می توانید خود را تعریف کنید.

    برای این مثال ما از Backend نتیجه RPC استفاده می کنیم ، که حالت ها را به عنوان پیام های گذرا ارسال می کند. در صورت انتخاب استفاده از ماژول پیکربندی ، باطن از طریق آرگومان باطن به کرفس ، (یا از طریق تنظیم نتیجه_backend مشخص می شود) مشخص می شود. بنابراین ، می توانید این خط را در پرونده tasks. py اصلاح کنید تا RPC: // با باطن:

    برنامه = کرفس("کارها", پشت='rpc: //', دلال='pyamqp: //') 

    یا اگر می خواهید از Redis به عنوان نتیجه پس زمینه استفاده کنید ، اما هنوز هم از RabbitMQ به عنوان کارگزار پیام (یک ترکیب محبوب) استفاده کنید:

    برنامه = کرفس("کارها", پشت='redis: // localhost', دلال='pyamqp: //') 

    برای مطالعه بیشتر در مورد Backends Result ، لطفاً به Backends نتیجه مراجعه کنید.

    اکنون با پیکربندی نتیجه گیری ، جلسه فعلی پایتون را ببندید و دوباره ماژول وظایف را وارد کنید تا تغییرات به مرحله اجرا در بیایند. این بار هنگام تماس با یک کار ، به نمونه asyncresult باز می گردید:

    >>> از جانب وظایف وارد كردن اضافه کردن # نزدیک و بازگشایی برای به روزرسانی "برنامه" >>> نتیجه = اضافه کردن.تاخیر انداختن(4, 4) 

    روش Ready () باز می گردد که آیا کار پردازش تمام شده است یا خیر:

    >>> نتیجه.آماده() دروغ 

    شما می توانید منتظر تکمیل نتیجه باشید ، اما این به ندرت مورد استفاده قرار می گیرد زیرا تماس ناهمزمان را به یک همزمان تبدیل می کند:

    >>> نتیجه.گرفتن(مدت زمان طولانی=1) 8 

    در صورت ایجاد استثناء ، دریافت () استثنا را مجدداً انجام می دهد ، اما می توانید با مشخص کردن استدلال تبلیغاتی این مسئله را نادیده بگیرید:

    >>> نتیجه.گرفتن(رواج دادن=دروغ) 

    اگر این کار یک استثنا را مطرح کرد ، می توانید به Traceback اصلی نیز دسترسی پیدا کنید:

    >>> نتیجه.ردیابی 

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

    برای مرجع کامل نتیجه نتیجه به CESERY. RESULT مراجعه کنید.

    پیکربندی

    کرفس ، مانند یک دستگاه مصرف کننده ، نیازی به پیکربندی زیادی برای کار ندارد. ورودی و خروجی دارد. ورودی باید به یک کارگزار وصل شود و خروجی را می توان به صورت اختیاری به یک پشتیبان نتیجه متصل کرد. با این حال ، اگر به پشت نگاه کنید ، یک درب وجود دارد که بارهای کشویی ، شماره گیری و دکمه ها را نشان می دهد: این پیکربندی است.

    پیکربندی پیش فرض باید برای اکثر موارد استفاده به اندازه کافی مناسب باشد ، اما گزینه های بسیاری وجود دارد که می تواند پیکربندی شود تا کرفس دقیقاً در صورت لزوم کار کند. خواندن در مورد گزینه های موجود ایده خوبی است برای آشنایی با آنچه می توان پیکربندی کرد. می توانید در مورد گزینه ها در مرجع پیکربندی و پیش فرض بخوانید.

    پیکربندی را می توان به طور مستقیم یا با استفاده از یک ماژول پیکربندی اختصاصی بر روی برنامه تنظیم کرد. به عنوان نمونه می توانید با تغییر تنظیمات task_serializer ، سریال پیش فرض مورد استفاده برای سریال سازی بارهای کار را پیکربندی کنید:

    برنامه.دلخور.task_serializer = 'Json' 

    اگر بسیاری از تنظیمات را به یکباره پیکربندی می کنید می توانید از بروزرسانی استفاده کنید:

    برنامه.دلخور.به روز رسانی( task_serializer='Json', پذیرش_=['Json'], # محتوای دیگر را نادیده بگیرید نتیجه_سیلیزر='Json', منطقه زمانی="اروپا/اسلو", Enable_utc=درست است، واقعی, ) 

    برای پروژه های بزرگتر ، یک ماژول پیکربندی اختصاصی توصیه می شود. فواصل کار دوره ای کدگذاری سخت و گزینه های مسیریابی وظیفه دلسرد می شود. خیلی بهتر است این موارد را در یک مکان متمرکز نگه دارید. این امر به ویژه در مورد کتابخانه ها صادق است ، زیرا کاربران را قادر می سازد که نحوه رفتار وظایف خود را کنترل کنند. یک پیکربندی متمرکز همچنین به شما امکان می دهد تا در صورت بروز مشکل سیستم تغییرات ساده ای ایجاد کند.

    شما می توانید به عنوان مثال کرفس خود بگویید که با تماس با App. config_from_object () از ماژول پیکربندی استفاده کنید:

    برنامه.config_from_object("CereryConfig") 

    این ماژول اغلب "celeryconfig" نامیده می شود ، اما می توانید از هر نام ماژول استفاده کنید.

    در مورد فوق ، یک ماژول به نام CELERYCONFIG. PY باید برای بارگیری از فهرست فعلی یا در مسیر پایتون در دسترس باشد. این می تواند چیزی شبیه به این باشد:

    کارگزار_ورل = 'pyamqp: //' نتیجه_بند = 'rpc: //' task_serializer = 'Json' نتیجه_سیلیزر = 'Json' پذیرش_ = ['Json'] منطقه زمانی = "اروپا/اسلو" Enable_utc = درست است، واقعی 

    برای تأیید اینکه پرونده پیکربندی شما به درستی کار می کند و هیچ خطای نحوی را شامل نمی شود ، می توانید سعی کنید آن را وارد کنید:

    $Pytho n-m CereryConfig

    برای مرجع کامل گزینه های پیکربندی ، به پیکربندی و پیش فرض مراجعه کنید.

    برای نشان دادن قدرت پرونده های پیکربندی ، اینگونه است که شما می توانید یک کار نادرست را به یک صف اختصاصی هدایت کنید:

    Task_routes =  "Tasks. Add": 'اولویت کم', > 

    یا به جای مسیریابی آن ، می توانید به جای آن کار را محدود کنید ، به طوری که فقط 10 کار از این نوع می توانند در یک دقیقه (10/متر) پردازش شوند:

    task_aotations =  "Tasks. Add": 'حد نرخ': '10/m '> > 

    اگر از RabbitMQ یا Redis به عنوان کارگزار استفاده می کنید ، می توانید کارگران را نیز راهنمایی کنید تا محدودیت نرخ جدیدی را برای کار در زمان اجرا تعیین کنند:

    $کرف س-A کرفس وظایف کنترل نرخ_یملیت وظایف. add10[email protected]: خوب محدودیت نرخ جدید با موفقیت تنظیم شده است 

    برای خواندن اطلاعات بیشتر در مورد حاشیه نویسی ها ، یا راهنمای نظارت و مدیریت برای اطلاعات بیشتر در مورد دستورات کنترل از راه دور و نحوه نظارت بر کارهایی که کارگران خود انجام می دهند ، به کارهای مسیریابی مراجعه کنید.

    از اینجا کجا برویم

    اگر می خواهید اطلاعات بیشتری کسب کنید ، باید به آموزش مراحل بعدی ادامه دهید و پس از آن می توانید راهنمای کاربر را بخوانید.

    عیب یابی¶

    در سؤالات متداول نیز یک بخش عیب یابی وجود دارد.

    کارگر شروع نمی کند: خطای اجازه

    • اگر از Debian ، Ubuntu یا سایر توزیع های مبتنی بر Debian استفاده می کنید:

    دبیان اخیراً به /dev /shm پرونده ویژه به /run /shm تغییر نام داد. یک راه حل ساده ایجاد یک پیوند نمادین است:

    #l n-s /run /shm /dev /shm

    اگر هر یک از آرگومان ها ی-pidfile ، -logfile ی ا-stamedb را ارائه می دهید ، باید اطمینان حاصل کنید که آنها به یک پرونده یا دایرکتوری که توسط کاربر شروع به کار می کند ، قابل خواندن و قابل خواندن است.

    باکند نتیجه کار نمی کند یا کارها همیشه در حالت انتظار دولت است

    همه کارها به طور پیش فرض در انتظار هستند ، بنابراین دولت بهتر می شود "ناشناخته" باشد. کرفس هنگام ارسال یک کار ، دولت را به روز نمی کند و هر کار بدون سابقه در انتظار است (شما شناسه کار را می دانید).

     

    1. اطمینان حاصل کنید که این کار Ignore_Result را فعال نکرده است.

       

    فعال کردن این گزینه ، کارگر را وادار به پرش از حالت های به روزرسانی می کند.

    شروع به کار چندین کارگر به طور تصادفی آسان است ، بنابراین اطمینان حاصل کنید که کارگر قبلی قبل از شروع کار جدید به درستی خاموش است. یک کارگر قدیمی که با پشتوانه نتیجه مورد انتظار پیکربندی نشده است ، ممکن است در حال اجرا باشد و کارها را ربوده است. استدلا ل-pidfile می تواند در یک مسیر مطلق تنظیم شود تا اطمینان حاصل شود که این اتفاق نمی افتد.

    اگر بنا به دلایلی ، مشتری پیکربندی شده است تا از یک پس زمینه متفاوت از کارگر استفاده کند ، شما قادر به دریافت نتیجه نخواهید بود. اطمینان حاصل کنید که پس زمینه به درستی پیکربندی شده است:

    >>> نتیجه = وظیفه.تاخیر انداختن() >>> چاپ(نتیجه.پشت) 
استراتژی های مؤثر فارکس...
ما را در سایت استراتژی های مؤثر فارکس دنبال می کنید

برچسب : نویسنده : توران میرهادی بازدید : <-PostHit-> تاريخ : جمعه 8 ارديبهشت 1402 ساعت: 15:00