ශ්‍රී ලංකාවේ නවතම තාක්ෂණික පුවත් 2026-07-21, Tuesday
💻 ක්‍රමලේඛනය · 🕒 කියවීමට විනාඩි 2 · 👁 1

Python 3.11 හි asyncio.coroutines අයිතිකාරකය නොමැති වීම – ඔබේ කේතය අලුත් කරගන්න

Python 3.11 හි asyncio.coroutines අයිතිකාරකය නොමැති වීම – ඔබේ කේතය අලුත් කරගන්න

ඔබේ AWS Lambda හෝ වෙනත් සේවාව Python 3.11 හෝ ඉහල අනුවාදයක් වෙත යාවත්කාලීන කළාම, AttributeError: module 'asyncio' has no attribute 'coroutine' යන වැරදි පණිවුඩයක් දිගටම පෙනේ. කේතයේ කිසිදු ලොජික් වෙනස්කමක් සිදු නොවූවද, @asyncio.coroutine මත පදනම් වූ පරණ ක්‍රමයක් ඉවත් කර ඇති නිසා මෙම දෝෂය හටගනී.

Python 3.5 දක්වා, async/await සින්ටැක්ස් හදුන්වා දීමට පෙර, @asyncio.coroutine යනු ජෙනරේටර්-ආධාරිත කොරෝටිනයන් ලියීමට භාවිතා වූ ක්‍රමයක්. එය yield from භාවිතයෙන් සම්පූර්ණ කර, event loop එකට කොරෝටිනයක් ලෙස හැසිරවීමට ඉඩදෙයි. Python 3.8 දී එය DeprecationWarning එකක් සමඟ අනුලකුණු කර, 3.11 හි සම්පූර්ණයෙන්ම මකා ඇත. එනිසා asyncio.coroutine ඇමතුමක් කිරීමේදී තත්කාලික අවවාදයක් නොලැබෙයි, නමුත් attribute එක නොමැති බැවින් තත්කාලීනවම exception එකක් උත්පන්න වේ.

මෙම ගැටළුව සාමාන්‍යයෙන් දෙකේ තැනක පෙනේ: ඔබේම පරණ කේතය async/await පෙර ලියවුනු කොටස්, හෝ 2018 ට පෙර ලියූ ටියුටෝරියල් එකක් පිටපත් කරගෙන ඇති කේතය; සහ පරණ asyncio කොරෝටිනයන් ඇතුළත් තෙවන පාර්ශ්ව පේකේජයක්. දෙකම 3.8‑10 අතර සාර්ථකව ක්‍රියා කරන නමුත් 3.11 යටතේ තවත් වැරදි බවට පත්වේ. මෙය ලොජික් බග් එකක් නොව, runtime‑upgrade trigger එකක් වන අතර, නවතම Python අනුවාදයට යාවත්කාලීන කිරීමේදී පමණක් වැරදි පෙන්වයි.

සැලසුම කුමක්ද? පරණ ජෙනරේටර්‑ආධාරිත කොරෝටිනයන් සියල්ල async/await සින්ටැක්ස් වෙත පරිවර්තනය කළ යුතුය. මූලික නීතිය පහසුයි: @asyncio.coroutine සහ def එකක් එක්ක තිබුනොත් async def බවට වෙනස් කරන්න; yield from සියල්ල await ලෙස පරිවර්තනය කරන්න. ඔබගේ කේතය නොවේ නම්, පළමුව python3 -c "import asyncio; print(asyncio.__file__)" මගින් asyncio මොඩියුලයේ පිහිටුම සොයා, grep -rn "asyncio.coroutine\|@coroutine" $(python3 -c "import site; print(site.getsitepackages()[0])") භාවිතයෙන් කුමන පේකේජයක මේ අසුබ්‍යාව පවතිනදැයි හඳුනා ගන්න. බොහෝ නවතම async ලයිබ්‍රරීන් 3.11 ඉවත් කිරීමකට පෙරම pip install --upgrade මගින් යාවත්කාලීන කර ඇත. නමුත් නවීන නොවූ, අත්හිටුවා ඇති පේකේජයක් නම්, fork‑and‑fix හෝ වෙනත් පවත්නා පේකේජයක් වෙත මාරු වීම අවශ්‍ය වේ.

ශ්‍රී ලංකාවට ඇති වැදගත්කම

  • සිසුන් සහ නවක සංවර්ධකයින් – async/await සින්ටැක්ස් ඉගෙනීම මඟින් Python වැඩසටහන් ලියීම වේගවත්, පරීක්ෂණාත්මක හා නවීන වෙයි.
  • ව්‍යාපාරික සංවර්ධක කණ්ඩායම් – Lambda, Cloud Functions වැනි serverless පරිසරයන්හි Python 3.11 යාවත්කාලීන කිරීමෙන් ක්‍රියාකාරිත්වය ඉහළ යයි, නමුත් පේකේජ යාවත්කාලීන කිරීමේ වැරදි වැළැක්වීමෙන් downtime අවම වේ.
  • ඉදිරි තාක්ෂණික ඉදිරිපත්කිරීම් – async/await භාවිතයෙන් API, data‑pipeline, real‑time streaming වැනි වැඩි ප්‍රමාණයේ asynchronous වැඩයන් සරලව ක්‍රියාත්මක කළ හැකිය.

අවසන් වශයෙන්, Python 3.11 වෙත යාවත්කාලීන කිරීමේ පෙර, ඔබේ repository එකේ -W error::DeprecationWarning flag එකක් සමඟ import your_module පරීක්ෂා කර බලන්න. මෙය ඔබට වැරදි පථය පෙරම හඳුනාගත හැකිවීමෙන්, production ‍ආරම්භක අවස්ථාවේ “cold start” දෝෂයක් නොවී, නරඹන ලද නඩුකාරකම් වේගවත් කරයි.

අදාල දෝෂය අතුරුදන් කිරීම සඳහා කේතය async/await වෙත පරිවර්තනය කිරීම, පේකේජ යාවත්කාලීන කිරීම හෝ අත්හිටුවා ඇති පේකේජයක් වෙනුවට නව එකක් තෝරා ගැනීම යන ක්‍රියාමාර්ග ගැනීමට කාලය එළඹී ඇත.

💡 ඔබේ Python කේතය අලුත් කර, අනාගතයට සූදානම් වෙන්න!
මූලාශ්‍රය මෙම ලිපිය AI මගින් රචිත මුල් සාරාංශයකි. සම්පූර්ණ වාර්තාව කියවන්න:
Dev.to ↗
#Python #asyncio #async/await #Lambda #Upgrade