Coding Lovers
2.02K subscribers
189 photos
16 videos
19 files
232 links
:همه شبکه های اجتماعی یکجا 🌐
Zil.ink/codinglovers

📌 تبلیغات:
@CodingLoversAds

:گروه 🍻
@CodingLovers_GP

:حرفی سخنی 🧑‍💻
@Amir_OfficiaI

:ثبت نمونه کار 🪄
@CodingLovers_result
Download Telegram
Coding Lovers
ASYNCHRONOUS | ناهمگام
SYNCHRONOUS | همگام
با چشم پوشی از مالتی‌پراسسینگ و مالتی‌تردینگ (در آینده باهاشون آشنا میشیممیرسیم به Asynchronous و Synchoronous. 👩‍🎓

میدونیم که Asynchronous و Synchoronous به ترتیب به معناهای "غیر‌همزمان" و "همزمان" هستن، قبل از شروع توضیحات لطفا هر چی توی ذهنتون از این مفاهیم ساختین رو پاک کنید، خصوصا مثال هایی که اساتید معمولا با فرایند آشپزی واستون مطرح کردن. 😐

همگی موافقیم که کدهامون دستوراتی هستن که ما تعریف کردیم و کامپیوترهامون موظف به اجرای این دستورات به دو صورت Async و Sync هستن.

🤷‍♀- منظورمون از Synchronous چیه؟!
وقتی حرف از Sync بودن کدمون میزنیم درواقع منظور اصلیمون ترتیب اجرای کده که به اصطلاح بصورت Blocking اجرا میشن؛ یعنی به ترتیب لاین های کد کدمون اجرا میشه و تا وقتی پروسه حال حاظر تکمیل نشه مابقی کد هم اجرا نمیشن. Sync بودن اجرای کد رو قابل پیش‌بینی میکنه و به هر صورتی که کد رو نوشته باشیم، دقیقا به همون صورت و ترتیب هم اجرا میشن.
😀- منظورمون از Asynchronous چیه؟!
شاید با خودتون بگین که Async خلاف روند Sync عمل میکنه، اما جا داره که بگم اینطور نیست!! Async و Sync مکمل هم هستن و در واقع Asynchronous بودن کد باعث متفاوت بودن ترتیب اجرا با ترتیب کد میشه، یعنی منتظر تموم شدن کد قبلی نمیمونه و طی زمانی که کد قبلی اجرا میشه به سایر اجزای کد میپردازه (کارکرد اف‌لود). کد های Async ممکنه که به حالت موازی صورت بگیرن و باعث اجرای پارالل و یا غیر موازی و موجب همروندی بشن. معمولا توی زبان هایی که از Asynchronous پشتیبانی میکنن با کلید های Async و Await مشخص و نوشته میشن.
💡- ی مثال جامع از تفاوت کارکرد Async و Sync؛
اپلیکیشن مثال های قبلی رو دوباره متصور بشین، فرض کنین این اپلیکیشن از چندین فانکشن تشکیل شده که هر فانکشن کار و عملیات خاصی رو انجام میدن، این وسط ی فانکشن تحت عنوان ارسال درخواست به API داریم که مسئولیت ارسال رکوئست به API و برگردوندن خروجی رو داره و ممکنه پاسخ از سمت API کمی طول بکشه، اگه این فانکشن رو بصورت Sync بنویسیم و اون رو کال کنیم، تا زمانی که فرایند و تمامی بلوک این فانکشن کامل انجام نشه مابقی فانکشن و کدها هم اجرا نمیشن و اپلیکیشن منتظر اتمام کار این فانکشن میمونه، ولی اگه صورت Async این کد رو بنویسیم، اپلیکیشن ما منتظر تکمیل شدن کارکرد این فانکشن نمیمونه و سایر فانکشن ها و کد به حالت عادی خودشون ادامه میدن 🥺
🤔- زبان های مختلف مدل Asynchronous رو چطور پیاده سازی میکنن و آیا همه توی همه زبان ها پشتیانی میشه؟!
زبان های مختلف دارای قابلیت Async معمولا یا از موارد زیر یا ترکیب و تلفیقشون واسه مدل Asynchronous استفاده میکنن :
1️⃣- استفاده از پراسس ها مبتنی به حافظه غیر اشتراکی که قبلا باهاشون آشنا شدیم.
2️⃣- با استفاده از Event ها، EventLoop و یا مابقی الگوریتم های مبتنی بر این‌ها
3️⃣- با استفاده از ترد با این تفاوت که از فضای اشتراکی استفاده میکنن (با تردم قبلا بصورت مفصل آشنا شدیم)

بعضی از زبان‌ها مثل پایتون و جاوااسکریپت از Async پشتیبانی و بعضی هم مثل PHP، C، Go و.. هم پشتیبانی نمیکنن که البته با مالتی‌تردینگ و مالتی‌پراسسینگ میشه این قابلیت رو پیاده سازی کرد.
🤨- پس با این حال بهتره همیشه Async بنویسم؟!
نه، خیلی اوقات نیازی به Async بودن کدمون نیست و Async نوشتن فانکشن و مابقی اجزای کد بیخودیه مثل این مورد. توی حالت کلی داخل مواقعی که با عملیات های IO Bound طرفیم باید کدمون حالت Async داشته باشه مثل مواقعی که با ارسال رکوئست های پیاپی با تاخیر زیاد یا مواقعی که با ورودی و خروجی زیادی و.. سر و کار داریم
✔️- موارد و نکات زیر رو هم به خاطر داشته باشین :
🔘توی کد های Async ترتیب اجرا، نحوه دسترسی هر جریان و قسمت اجرایی به داده‌ها و مدت زمان صرف شده واسه رسیدن به نتیجه مشخص نیست.

🟢مدیریت استیت‌منیجمنت توی کد های Async ممکنه چالش برانگیز و نیازمند به الگوی مناسب داشته باشه.

🔘نمیتونیم هیچ تضمینی واسه سریع‌تر شدن کد با Async کردنش ارائه بدیم (بستگی به فرایند داره)

🟣توی کد های Async مدیریت منابع خیلی مهمه، فرض کنید بصورت Async به دیتابیسی اتصال داریم، اگه مدیریت درستی انجام نشه منجر به Memory Leek میشه!


😎 CodingLovers | #Farshad@CodingLovers_OFF
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍54
تقریبا ی پست دیگه که شامل مالتی‌پراسسینگ، مالتی‌تردینگ و ی جمع‌بندی مشتی در مورد برنامه‌نویسی موازی داریم و مجدد به عمیق شدن توی TeleBot می‌پردازیم، اگه بحث و مورد خاصی واسه تشریح کردن مد نظرتونه کامنت کنین.

به قول این یوتیوبرا "لایک ( اینجا ریکشن) و شِیر هم که مرامتونه" 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1710🔥3
Coding Lovers
فردا میشه 19 سالم 11 آذر 😏 به همین مناسبت سن تونو بگید ببینم چند ساله اید؟
چه زود میگذره، همین دیروز هم 11 آذر بودا 😏
شد 20 سالم

یه دوره باحالمون نشه به همین مناسبت؟
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
#فان
فقط دارن همو پوشش میدن😂😂
🤣24
16 آذر، روز دانشجو مبارک 🔥

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

تو دنیایی که همه‌چیز با کد می‌چرخه، شماها سازنده‌های آینده‌اید. شاید الان تو فکر این باشید که چرا تست‌هاتون پاس نمی‌شه یا چرا یه فانکشن ساده این‌قدر ارور می‌ده، ولی یادتون باشه، همین خطاها شما رو به یه کدنویس حرفه‌ای تبدیل می‌کنه.

یه دنیای پر از صفر و یک منتظر ایده‌ها و خلاقیت‌های شماست. پس نترسید از شکست، چون پشت هر ارور، یه راه‌حل خفن مخفی شده.

روزتون پر از انگیزه، کامیت‌های تمیز و پروداکت‌های موفق باشه.
مخلص💜
715👍5🔥3👎1
یه چالش تقریبا سخت
با استفاده از regex، از متن زیر
"0b0caf091d79a4006ebf6c2f9b17b60c1d798069$[[\\"__json_message\\"\\0540\\05425\\054\\"Your edit code: \\"\\054\\"pZESFitd\\"]]"

چگونه pZESFitd را بگیریم؟ ( یه ساعته درگیرشم )
👍6
بنظرتون خروجی چیه؟

#quiz
@CodingLovers | Ali
خروجی کدومه؟
Anonymous Quiz
26%
33
37%
2
38%
8
👎7👍6
خروجی کد چیه بنظرتون؟

اینو میخواستم فردا بزارم ولی طاقت نیاوردم😂😂

#quiz
@CodingLovers | Ali
🤣7
👍4
به پایان آمد این دفتر حکایت همچنان باقی ☹️

خودم خیلی از پایروگرام استفاده نمیکردم ولی اگه شما هنوزم از پایروگرام استفاده میکردید، شاید بهتر باشه کم کم به فکر لایبرری جدیدی باشید.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢9👍6
آمار کانالمون توی سال 2024

16 تا استارز، 3910 تا ری اکشن
راضیم ازتون 🥹
Please open Telegram to view this post
VIEW IN TELEGRAM
21👍3🔥2👎1
🌟 هوش مصنوعی، کمک یا تهدید؟
توی این پست بیشتر میخام راجب یه تحقیق از سایت nature.com صحبت کنم.

از وقتی هوش مصنوعی اومده بیشتر افراد - مخصوصا ادیتور ها و گرافیست ها و برنامه نویس ها - دارن ازش استفاده میکنن و تبدیل شده به کاری روزمره.
جمله ای که برای فضای مجازی میگفتن، حالا برای هوش مصنوعی هم کاربرد داره: «هم خوبه هم بد؛ ازش درست استفاده کنی کمکت میکنه، بد استفاده کنی یه تهدیده.»

💭 طبق تحقیقات: «68.9 درصد تنبلی در انسان، 68.6 درصد در مسائل حریم خصوصی و امنیتی شخصی و 27.7 درصد از دست دادن تصمیم گیری ناشی از تاثیر هوش مصنوعی است.»

وقتی AI باعث بشه تو از فکر کردن دست بکشی، و جای اینکه سر مشکلی فکر کنی و راه حل رو پیدا کنی، بری مستقیم سراغ AI، خودت رو بخشی از همین تحقیقات بدون!
قبل از هوش مصنوعی آدم ها چیکار میکردن؟ وقتی میخواستن پروژه ای بسازن نمیرفتن از هوش مصنوعی کمک بگیرن؛ خودشون میرفتن تحقیق میکردن، دانشش رو بدست میاوردن و بعد خودشون از پس پروژه بر میومدن؛

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

( فرض کن یروزی قراره تمام AIها نابود بشن، اونموقع از پس کارات بر میای، یا گیر میکنی توی گِل؟ )

پ.ن: فکر کنم قراره پست پُربحثی باشه 😂

@CodingLovers
👍72
سلام ظهرتون بخیر 🙃👋🏻

به نظرتون چه ساعت هایی معمولاً آدما بیشتر آنلاینن توی اینترنت؟
🤣8
Forwarded from AliAkbar
بعد مدرسه ها
👍5
Coding Lovers
بعد مدرسه ها
چند نفرتون مدرسه میرید؟
Anonymous Poll
53%
من میرمم 👶
47%
نمیرم 😎
🤣9
Coding Lovers
چند نفرتون مدرسه میرید؟
دانشگاه هم حسابه
😁8
جواب پست بالایی رو بدید اگه دوست داشتید
چون واقعیتش دارم برنامه ریزی میکنم برا یه سری آموزش و چیزای باحال

شب بیشتر درموردش حرف میزنم، بعد از پست خفن علی

شمام نظری پیشنهادی چیزی دارید زیر همین پست بگید

ری اکشن قلب بزنید به یاد قدیما ❤️😍
Please open Telegram to view this post
VIEW IN TELEGRAM
19
🧶 چطور یک برنامه رو thread safe کنیم؟
وقتی برنامه ای مینویسم که قراره از threading ( یا async ) برای اجرای همزمان چند پروسه استفاده کنه، بحث thread safe موضوع حساسی میشه.

البته که پایتون درحالت عادی کلا thread safe هستش، اما توی شرایطی مثل نوشتن همزمان فایل یا کار با یسری لایبرری ها به مشکل میخوریم.
🧶 مفهوم thread-safe
ما به تابعی یا classی میگیم thread-safe که اگر همزمان در یک لحظه چندین بار تغییرات در اون ایجاد بشه و خونده بشه، بدون هیچ مشکلی عمل کنه.
تمام تایپ های اصلی پایتون از نسخه ۳.۸ یا ۳.۹ به بعد thread safe هستن؛ dict list set int float ...
توی کاربرد GIL بهتر درک میکنین
🏎️ مفهوم race condition
این دقیقا زمانی هستش که دو نفر همزمان به چیزی مشترک دسترسی پیدا میکنن که مشکلات عجیبی پیش میاد اینجا:
فرض کنید متغییر counter برابر با 0 هستش.
فرد x و y همزمان بهش دسترسی پیدا میکنن.
فرد y یک عدد به counter اضافه میکنه.
فرد x متغییر counter رو میخونه و استفادش میکنه.

چه اتفاقی میوفته؟ فرد y یکی به counter اضافه کرده و شده 1، ولی فرد x همچنان از مقدار 0 استفاده کرده.
اگه امتحان کنین همچین اتفاقی رو نمیبینین چون پایتون خودش جلوشو میگیره

یا یه مثال بهتر؛ همزمان دو نفر میخوان یک فایل رو تغییر بدن، کلا محتوای فایل یچیز عجیب غریب میشه
اینو میتونین راحت امتحان کنین


به این اتفاقات میگن race condition.

🔒 درک بهتر کاربرد GIL توی async
چرا میگم از requests یا socket توی ربات هاتون ( حالت اسینک ) استفاده نکنین؟ دلیلش همینجاست.
اول بنظرم این پست رو بخونین


تمام لایبرری های پایتون ( ۹۰ درصدشون ) برای اینکه thread-safe باشن، هرکاری میخوان بکنن میزنن GIL رو قفل میکنن که مشکلی پیش نیاد؛ حتی تمام تایپ های پایتون همینکار رو میکنن

وقتی GIL قفل میشه برنامه متوقف میشه تا وقتی آزاد بشه

async def loop():
for i in range(10000):
print(i)

async def req():
requests.get("https://google.com")

async def main():
asyncio.create_task(loop())
await req()

asyncio.run(main())

وقتی این کد رو اجرا کنین متوجه میشین وقتی requests میخواد کارش رو انجام بده کل برنامه رو میزنه متوقف میکنه، چرا؟
داخل requests از socket استفاده میشه که socket برای انجام هرکاری اول GIL رو قفل میکنه که این باعث میشه کل برنامتون متوقف میشه ( باید از aiohttp یا httpx یا ... استفاده کنید )

همونطور که گفتم «تمام لایبرری های پایتون ( ۹۰ درصدشون ) برای اینکه thread-safe باشن، هرکاری میخوان بکنن میزنن GIL رو قفل میکنن» درست مثل socket.
حتی دیکشنری هم برای هرکاری GIL رو قفل میکنه اما اینقدر سریع عمل میکنه آسیبی به برنامه نمیزنه

همتون داخل برنامه های async، هر تابعی رو گیر میارید async def مینویسید، خب این اشتباهه چون تاثیری نداره.
async def req():
requests.get("https://google.com")

خب این چه تاثیری داشت؟ هیچی. اصلا نیازی نیست async def بنویسین چون تاثیری نداره.

async def select():
cursor = conn.cursor()
cursor.execute("SELECT * FROM users;")
return cursor.fetchall()

این چی؟ بازم هیچ تاثیری نداره چون اصلا نیازی به async بودن تابع نیست،فقط باعث میشین تابع کند تر عمل بکنه
فقط زمانی حق دارید تابعی رو async def تعریف کنید که مجبورید

async def req():
await httpx.get("https://google.com")

من اینجا مجبورم async def تعریف کنم چون اگه نباشه نمیتونم await کنم
این قانون رو رعایت نکنین فقط باعث میشید تابع کند تر عمل کنه


🌟 ادامه داستان توی پست های بعدی ...

@CodingLovers_OFF
10👍2
Coding Lovers
🧶 چطور یک برنامه رو thread safe کنیم؟ وقتی برنامه ای مینویسم که قراره از threading ( یا async ) برای اجرای همزمان چند پروسه استفاده کنه، بحث thread safe موضوع حساسی میشه. البته که پایتون درحالت عادی کلا thread safe هستش، اما توی شرایطی مثل نوشتن همزمان فایل…
🧶 چطور یک برنامه رو thread safe کنیم؟ ( پارت دوم )
بهضی مفاهیم رو متوجه شدیم، حالا بریم سراغ راه حل ها.

برای ایجاد یک برنامه thread-safe ما از چیزایی مثل Lock و RwLock استفاده میکنیم
تو زبان های سطح پایین بهشون میگن Mutex و RwMutex ( و دقیق تر میشه mutual exclusion )

💭 نحوه کارکرد mutual exclusion
ما برای اینکه مشکلاتی مثل race condition هارو برطرف کنیم به سیستمی نیاز داریم تا از دسترسی همزمان به یک متغیر ( یا حافظه مموری ) رو مدیریت کنه.
اسم این سیستم رو میزاریم mutual exclusion.

برای اینکه نحوه کارکرد رو متوجه بشید، یه شبیه سازی انجام میدم:
یک متغیر locked رو فرض کنید که میتونه True یا False باشه.
locked = True # or False

دو تِرِد همزمان دارن اجرا میشن که قراره یک فایل رو ادیت بزنن.
اگه بدون هیچ توجهی به race condition کارشون رو انجام بدن، محتویات فایل میریزه بهم، پس نیازه که یجوری بهم خبر بدن که «داداش صبر کن من دارم ادیت میزنم، بعد من ادیت بزن».

چجوری خبر میدن؟ هرکی قراره ادیت بزنه باید locked رو True کنه، کارش تموم شد False کنه.
اینجوری نفر دوم میتونه بررسی کنه آیا مقدار locked به True تبدیل شده ؟ ( یعنی نفر اول داره ادیت میزنه یا نه؟ )
اگه اره خب صبر میکنه تا locked دوباره بشه False.
سیستم mutual exclusion دقیقا کار locked رو انجام میده


🔒 انواع Lock در پایتون
- نوع مخصوص thread:
طبق مثال خودمون، وقتی ببینه locked شده True، کل تِرِد رو متوقف میکنه، تا یه تِرِد دیگه بیاد locked رو بکنه False

- نوع مخصوص async
طبق مثال خودمون، وقتی ببینه locked شده True، کل task رو متوقف میکنه، تا یه task دیگه بیاد locked رو بکنه False

🌟 اموزش استفاده از threading.Lock
یک تابع رو فرض کنید که فایلی رو ادیت بزنه:
def write(text):
with open("a.txt", "w") as fd:
fd.write(text)

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

t1 = threading.Thread(target=write, args=("Hello Man",))
t2 = threading.Thread(target=write, args=("Im amazing",))

t1.start()
t2.start()

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

پس میایم از threading.Lock استفاده میکنیم:
lock = threading.Lock()

def write(text):
with lock:
with open("a.txt", "w") as fd:
fd.write(text)

# rest of code ...


اینجوری مشکل حل میشه و برنامه thread-safe پیش میره.

🌟 ادامه داستان توی پست های بعدی ...

@CodingLovers_OFF
3
سال نو میلادی مبارک 🎉

ایشالله سالی پر از پروژه، بدون باگ، و پیشرفت داشته باشید
14👍3🔥1