با @toomaj موافقم.
احتمالا بدترین کار توی برنامه نویسی، duplicate کردن باشه. حالا توی هر سطح و هر قسمتی از کار.
هروقت هرجا از هرچیزی (حتی داکیومنتها) ۲تا نسخه داشتید، یه مشکل بزرگه و باید فیکس بشه.
اینجا هم احتمالا با تغییر معماری پروژه، مشکلتون حل بشه.
حتی یک درصد هم متوجه منظورتون نمیشم. اگه همش یه اپلیکیشن باشه و بخشهای مختلف رو به شکل ماژول در کنار هم قرار بدید، تمام منطق برنامتون در هر لحظه در حال اجراست و آمادهی پاسخ دادن به ریکوئستهاست دیگه!
«موازی» یعنی چی؟
اخه میگن پایتون توی پردازش موازی خوب نیست - منم اپ هامو جدا کردم (یکیش web server هست و بقیه دیتابیس رو چند ثانیه یکبار چک میکنن و اگر چیز جدیدی بود پردازشش میکنن )
از پایتون و فریمورک sanic استفاده میکنم که async هست ولی خب میخوام اپ اصلی رو فقط درگیر پاسخ به ریکوئست ها کنم و نه چیز دیگه ای که بخواد جلوی کارایی اش رو بگیره - سرور قراره به ریکوئست های زیادی جواب بده
بله. پایتون تا زمانی که GIL وجود داره، برای پردازش موازی خوب نیست (البته مساله یه کم وخیمتر از اینه). ولی این که پردازش موازی نیست!
چیزی که فهمیدم اینه که یه webserver دارید که مثلا کاربر یه ریکوئستی میزنه و نتیجش توی دیتابیس ثبت میشه.
بعد دوتا process داریم که محتوای اون دیتابیس رو بررسی میکنن و یه کاری انجام میدن.
راهی نیست که اون دوتا پراسس، داخل webserver تعریف بشن و وقتی ریکوئستی زده میشه، قبل از ویرایش دیتابیس، دیتا از داخل تابعهای اون دوتا پراسس عبور کنه؟
چه لزومی داره که اون دوتا اپلیکیشن، به طور مجزا کار کنن و هر چند ثانیه یکبار بخوان دیتابیس رو بررسی کنن؟
به نظر میرسه میشه معماری کلی سیستم رو بهینه کرد.
وقتی اپ ها رو کاملا از هم جدا کردی دیگه نمیتونی بگی فایل تکراری بین اپ ها وجود داره، چون از هم جدا هستند، شاید بتونی قسمتهایی از کد رو به صورت کتابخونه در بیاری که توی دست و پا نباشند اما کار خاص دیگه ای نمیشه انجام داد، شایدم اشتباه میکنم یا هنوز متوجه نیاز شما نشدم
background job queue
لزوما message queue نیست
اگر کاری چندین ثانیه طول می کشه نمیشه در thread اصلی که جواب به http request باشه چون latency درخواست اصولا باید کم باشه
در زبان ها با concurrency خوب یا این کار هارو در thread جدا به صورت async اجرا میکنند و در صورت پشتیبانی نکردن از concurrency یک worker جدا از برنامه اصلی می فرستند در روبی و پایتان روش دوم رایج هستش و کتابخانه هایی صف queue و worker ها رو مدیریت میکنند
sidekiq , celery , resque از این نوع برنامه ها هستند