معضل فایل های تکراری در یک پروژه

سلام دوستان.
من ی سایت دارم که از ۳ تا app جدا تشکیل شده

‍‍‍

main-app/
app1/
app2/

حالا ی مشکلی که وجود داره اینه که فایل های connection دیتابیس و model ها ( که توی برنامه اصلی هستن ) رو باید توی هر ۳ تا app داشته باشم.

راه حلی وجود داره که فایل هارو بعد از تغییر دوباره توی پوشه بقیه app ها کپی نکنم؟

اگر میشه یکمی بیشتر و خوانا تر توضیح بده :slightly_smiling_face:

1 پسندیده

چرا اپ ها رو به صورت ماژول زیر یک اپ اصلی تعریف نمیکنی؟

1 پسندیده

با @toomaj موافقم.
احتمالا بدترین کار توی برنامه نویسی، duplicate کردن باشه. حالا توی هر سطح و هر قسمتی از کار.
هروقت هرجا از هرچیزی (حتی داکیومنت‌ها) ۲تا نسخه داشتید، یه مشکل بزرگه و باید فیکس بشه.

اینجا هم احتمالا با تغییر معماری پروژه‌، مشکلتون حل بشه.

میخوام برنامه ها موازی ران بشن.

مثلا؟

حتی یک درصد هم متوجه منظورتون نمیشم. اگه همش یه اپلیکیشن باشه و بخشهای مختلف رو به شکل ماژول در کنار هم قرار بدید، تمام منطق برنامتون در هر لحظه در حال اجراست و آماده‌ی پاسخ دادن به ریکوئستهاست دیگه!
«موازی» یعنی چی؟

مشخص نکردید نرم‌افزارتون چیه و با چه تکنولوژی‌هایی درستش کردید ولی اگه از Flask استفاده میکنید:
https://flask.palletsprojects.com/en/1.1.x/blueprints/
با django خیلی کم کار کردم ولی فکر کنم اونجا بهش میگن package

1 پسندیده

اخه میگن پایتون توی پردازش موازی خوب نیست - منم اپ هامو جدا کردم (یکیش web server هست و بقیه دیتابیس رو چند ثانیه یکبار چک میکنن و اگر چیز جدیدی بود پردازشش میکنن )

از پایتون و فریمورک sanic استفاده میکنم که async هست ولی خب میخوام اپ اصلی رو فقط درگیر پاسخ به ریکوئست ها کنم و نه چیز دیگه ای که بخواد جلوی کارایی اش رو بگیره - سرور قراره به ریکوئست های زیادی جواب بده

بله. پایتون تا زمانی که GIL وجود داره، برای پردازش موازی خوب نیست (البته مساله یه کم وخیم‌تر از اینه). ولی این که پردازش موازی نیست!
چیزی که فهمیدم اینه که یه webserver دارید که مثلا کاربر یه ریکوئستی میزنه و نتیجش توی دیتابیس ثبت میشه.
بعد دوتا process داریم که محتوای اون دیتابیس رو بررسی میکنن و یه کاری انجام میدن.

راهی نیست که اون دوتا پراسس، داخل webserver تعریف بشن و وقتی ریکوئستی زده میشه، قبل از ویرایش دیتابیس، دیتا از داخل تابع‌های اون دوتا پراسس عبور کنه؟

چه لزومی داره که اون دوتا اپلیکیشن، به طور مجزا کار کنن و هر چند ثانیه یک‌بار بخوان دیتابیس رو بررسی کنن؟
به نظر میرسه میشه معماری کلی سیستم رو بهینه کرد.

1 پسندیده

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

1 پسندیده

آخه کاری که اون دوتا اپ دیگه انجام میدن زمان بره. مثلا ی چیزی حدود ۲۰ ثانیه طول میکشه

شما با background job کار طولانی جدا از thread اصلی می تونی انجام بدی
در پایتان کتابخانه celery برای این کاره

https://flask.palletsprojects.com/en/1.1.x/patterns/celery/

3 پسندیده

اگر کسی دنبال task queue باشه این بدردش میخوره

1 پسندیده

ولی فکر نمیکنم بخوام از message queue استفاده کنم

background job queue
لزوما message queue نیست
اگر کاری چندین ثانیه طول می کشه نمیشه در thread اصلی که جواب به http request باشه چون latency درخواست اصولا باید کم باشه

در زبان ها با concurrency خوب یا این کار هارو در thread جدا به صورت async اجرا میکنند و در صورت پشتیبانی نکردن از concurrency یک worker جدا از برنامه اصلی می فرستند در روبی و پایتان روش دوم رایج هستش و کتابخانه هایی صف queue و worker ها رو مدیریت میکنند
sidekiq , celery , resque از این نوع برنامه ها هستند

2 پسندیده