ಪೈಥಾನ್ asyncio ಕೊರೂಟೀನ್ಗಳನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಅಂತರ್ನಿರ್ಮಿತ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಬಳಸುವ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ. ದೃಢವಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಸಾಮಾನ್ಯ ಅಸಮಕಾಲಿಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಸಮಸ್ಯೆಗಳನ್ನು ಗುರುತಿಸಿ ಮತ್ತು ಪರಿಹರಿಸಿ.
ಪೈಥಾನ್ ಕೊರೂಟೀನ್ ಡೀಬಗ್ ಮಾಡುವುದು: Asyncio ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು
ಪೈಥಾನ್ನಲ್ಲಿ asyncio
ನೊಂದಿಗೆ ಅಸಮಕಾಲಿಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಗಮನಾರ್ಹ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಯೋಜನಗಳನ್ನು ನೀಡುತ್ತದೆ, ವಿಶೇಷವಾಗಿ I/O-ಬೌಂಡ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ. ಆದಾಗ್ಯೂ, ಅಸಮಕಾಲಿಕ ಕೋಡ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡುವುದು ಅದರ ರೇಖಾತ್ಮಕವಲ್ಲದ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಹರಿವಿನಿಂದಾಗಿ ಸವಾಲಾಗಿರಬಹುದು. ಪೈಥಾನ್ asyncio
ಗಾಗಿ ಅಂತರ್ನಿರ್ಮಿತ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ, ಅದು ಡೀಬಗ್ ಮಾಡುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಬಹಳ ಸರಳಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ ಅಸಮಕಾಲಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿನ ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ಪರಿಹರಿಸಲು asyncio
ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಹೇಗೆ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸುವುದು ಎಂಬುದನ್ನು ಈ ಮಾರ್ಗದರ್ಶಿ ಅನ್ವೇಷಿಸುತ್ತದೆ.
ಅಸಮಕಾಲಿಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಸವಾಲುಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ಡೀಬಗ್ ಮೋಡ್ಗೆ ಧುಮುಕುವ ಮೊದಲು, ಅಸಮಕಾಲಿಕ ಕೋಡ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡುವಲ್ಲಿನ ಸಾಮಾನ್ಯ ಸವಾಲುಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ:
- ರೇಖಾತ್ಮಕವಲ್ಲದ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ: ಅಸಮಕಾಲಿಕ ಕೋಡ್ ಅನುಕ್ರಮವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ. ಕೊರೂಟೀನ್ಗಳು ಈವೆಂಟ್ ಲೂಪ್ಗೆ ನಿಯಂತ್ರಣವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತವೆ, ಇದು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮಾರ್ಗವನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಕಷ್ಟವಾಗುತ್ತದೆ.
- ಸಂದರ್ಭ ಬದಲಾವಣೆ: ಕಾರ್ಯಗಳ ನಡುವೆ ಆಗಾಗ್ಗೆ ಸಂದರ್ಭ ಬದಲಾವಣೆಯು ದೋಷಗಳ ಮೂಲವನ್ನು ಮರೆಮಾಡಬಹುದು.
- ದೋಷ ಪ್ರಸರಣ: ಒಂದು ಕೊರೂಟೀನ್ನಲ್ಲಿನ ದೋಷಗಳು ಕರೆ ಮಾಡುವ ಕೊರೂಟೀನ್ನಲ್ಲಿ ತಕ್ಷಣವೇ ಗೋಚರಿಸುವುದಿಲ್ಲ, ಇದು ಮೂಲ ಕಾರಣವನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಕಷ್ಟವಾಗುತ್ತದೆ.
- ರೇಸ್ ಕಂಡೀಷನ್ಗಳು: ಬಹು ಕೊರೂಟೀನ್ಗಳು ಏಕಕಾಲದಲ್ಲಿ ಪ್ರವೇಶಿಸುವ ಹಂಚಿಕೆಯ ಸಂಪನ್ಮೂಲಗಳು ರೇಸ್ ಕಂಡೀಷನ್ಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು, ಇದರ ಪರಿಣಾಮವಾಗಿ ಊಹಿಸಲಾಗದ ನಡವಳಿಕೆ ಉಂಟಾಗುತ್ತದೆ.
- ಡೆಡ್ಲಾಕ್ಗಳು: ಕೊರೂಟೀನ್ಗಳು ಪರಸ್ಪರ ಅನಿರ್ದಿಷ್ಟವಾಗಿ ಕಾಯುತ್ತಾ ಡೆಡ್ಲಾಕ್ಗಳನ್ನು ಉಂಟುಮಾಡಬಹುದು, ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.
Asyncio ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಪರಿಚಯಿಸಲಾಗುತ್ತಿದೆ
asyncio
ಡೀಬಗ್ ಮೋಡ್ ನಿಮ್ಮ ಅಸಮಕಾಲಿಕ ಕೋಡ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ಬಗ್ಗೆ ಅಮೂಲ್ಯವಾದ ಒಳನೋಟಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಇದು ಈ ಕೆಳಗಿನ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ನೀಡುತ್ತದೆ:
- ವಿವರವಾದ ಲಾಗಿಂಗ್: ಕೊರೂಟೀನ್ ರಚನೆ, ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ, ರದ್ದತಿ ಮತ್ತು ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆಗೆ ಸಂಬಂಧಿಸಿದ ವಿವಿಧ ಈವೆಂಟ್ಗಳನ್ನು ಲಾಗ್ ಮಾಡುತ್ತದೆ.
- ಸಂಪನ್ಮೂಲ ಎಚ್ಚರಿಕೆಗಳು: ಮುಚ್ಚದ ಸಾಕೆಟ್ಗಳು, ಮುಚ್ಚದ ಫೈಲ್ಗಳು ಮತ್ತು ಇತರ ಸಂಪನ್ಮೂಲ ಸೋರಿಕೆಗಳನ್ನು ಪತ್ತೆ ಮಾಡುತ್ತದೆ.
- ನಿಧಾನ ಪ್ರತಿಕ್ರಿಯೆ ಪತ್ತೆ: ಕಾರ್ಯಗತಗೊಳಿಸಲು ನಿರ್ದಿಷ್ಟ ಮಿತಿಗಿಂತ ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುವ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಗುರುತಿಸುತ್ತದೆ, ಇದು ಸಂಭಾವ್ಯ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಗಳನ್ನು ಸೂಚಿಸುತ್ತದೆ.
- ಕಾರ್ಯ ರದ್ದತಿ ಟ್ರ್ಯಾಕಿಂಗ್: ಕಾರ್ಯ ರದ್ದತಿಯ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ, ಕಾರ್ಯಗಳನ್ನು ಏಕೆ ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆಯೇ ಎಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.
- ವಿನಾಯಿತಿ ಸನ್ನಿವೇಶ: ಕೊರೂಟೀನ್ಗಳಲ್ಲಿ ಉಂಟಾಗುವ ವಿನಾಯಿತಿಗಳಿಗೆ ಹೆಚ್ಚಿನ ಸನ್ನಿವೇಶವನ್ನು ನೀಡುತ್ತದೆ, ದೋಷವನ್ನು ಅದರ ಮೂಲಕ್ಕೆ ಪತ್ತೆಹಚ್ಚಲು ಸುಲಭವಾಗುತ್ತದೆ.
Asyncio ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದು
ನೀವು asyncio
ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಹಲವಾರು ವಿಧಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು:
1. PYTHONASYNCIODEBUG
ಪರಿಸರ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬಳಸುವುದು
ನಿಮ್ಮ ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಚಲಾಯಿಸುವ ಮೊದಲು PYTHONASYNCIODEBUG
ಪರಿಸರ ವೇರಿಯೇಬಲ್ ಅನ್ನು 1
ಗೆ ಹೊಂದಿಸುವ ಮೂಲಕ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಸರಳವಾದ ಮಾರ್ಗವಾಗಿದೆ:
export PYTHONASYNCIODEBUG=1
python your_script.py
ಇದು ಸಂಪೂರ್ಣ ಸ್ಕ್ರಿಪ್ಟ್ಗಾಗಿ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
2. asyncio.run()
ನಲ್ಲಿ ಡೀಬಗ್ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಹೊಂದಿಸುವುದು
ನಿಮ್ಮ ಈವೆಂಟ್ ಲೂಪ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ನೀವು asyncio.run()
ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ, ನೀವು debug=True
ಆರ್ಗ್ಯುಮೆಂಟ್ ಅನ್ನು ಪಾಸ್ ಮಾಡಬಹುದು:
import asyncio
async def main():
print("Hello, asyncio!")
if __name__ == "__main__":
asyncio.run(main(), debug=True)
3. loop.set_debug()
ಅನ್ನು ಬಳಸುವುದು
ನೀವು ಈವೆಂಟ್ ಲೂಪ್ ನಿದರ್ಶನವನ್ನು ಪಡೆದುಕೊಳ್ಳುವ ಮೂಲಕ ಮತ್ತು set_debug(True)
ಅನ್ನು ಕರೆ ಮಾಡುವ ಮೂಲಕ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು:
import asyncio
async def main():
print("Hello, asyncio!")
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.set_debug(True)
loop.run_until_complete(main())
ಡೀಬಗ್ ಔಟ್ಪುಟ್ ಅನ್ನು ಅರ್ಥೈಸುವುದು
ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದ ನಂತರ, asyncio
ವಿವರವಾದ ಲಾಗ್ ಸಂದೇಶಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಈ ಸಂದೇಶಗಳು ನಿಮ್ಮ ಕೊರೂಟೀನ್ಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ಬಗ್ಗೆ ಅಮೂಲ್ಯವಾದ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸುತ್ತವೆ. ಡೀಬಗ್ ಔಟ್ಪುಟ್ನ ಕೆಲವು ಸಾಮಾನ್ಯ ಪ್ರಕಾರಗಳು ಮತ್ತು ಅವುಗಳನ್ನು ಹೇಗೆ ಅರ್ಥೈಸುವುದು ಎಂಬುದು ಇಲ್ಲಿದೆ:
1. ಕೊರೂಟೀನ್ ರಚನೆ ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ
ಕೊರೂಟೀನ್ಗಳನ್ನು ರಚಿಸಿದಾಗ ಮತ್ತು ಪ್ರಾರಂಭಿಸಿದಾಗ ಡೀಬಗ್ ಮೋಡ್ ಲಾಗ್ ಮಾಡುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಕೊರೂಟೀನ್ಗಳ ಜೀವನಚಕ್ರವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ:
asyncio | execute () running at example.py:3>
asyncio | Task-1: created at example.py:7
ಈ ಔಟ್ಪುಟ್ Task-1
ಎಂಬ ಕಾರ್ಯವನ್ನು example.py
ನ 7 ನೇ ಸಾಲಿನಲ್ಲಿ ರಚಿಸಲಾಗಿದೆ ಮತ್ತು ಪ್ರಸ್ತುತ 3 ನೇ ಸಾಲಿನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ a()
ಕೊರೂಟೀನ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡುತ್ತಿದೆ ಎಂದು ತೋರಿಸುತ್ತದೆ.
2. ಕಾರ್ಯ ರದ್ದತಿ
ಕಾರ್ಯವನ್ನು ರದ್ದುಗೊಳಿಸಿದಾಗ, ಡೀಬಗ್ ಮೋಡ್ ರದ್ದತಿ ಈವೆಂಟ್ ಮತ್ತು ರದ್ದತಿಗೆ ಕಾರಣವನ್ನು ಲಾಗ್ ಮಾಡುತ್ತದೆ:
asyncio | Task-1: cancelling
asyncio | Task-1: cancelled by () running at example.py:10>
ಇದು Task-1
ಅನ್ನು Task-2
ರದ್ದುಗೊಳಿಸಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. ಅನಿರೀಕ್ಷಿತ ನಡವಳಿಕೆಯನ್ನು ತಡೆಗಟ್ಟಲು ಕಾರ್ಯ ರದ್ದತಿಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
3. ಸಂಪನ್ಮೂಲ ಎಚ್ಚರಿಕೆಗಳು
ಸಾಕೆಟ್ಗಳು ಮತ್ತು ಫೈಲ್ಗಳಂತಹ ಮುಚ್ಚದ ಸಂಪನ್ಮೂಲಗಳ ಬಗ್ಗೆ ಡೀಬಗ್ ಮೋಡ್ ಎಚ್ಚರಿಸುತ್ತದೆ:
ResourceWarning: unclosed
ಈ ಎಚ್ಚರಿಕೆಗಳು ಸಂಪನ್ಮೂಲ ಸೋರಿಕೆಗಳನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ಸರಿಪಡಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತವೆ, ಇದು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅವನತಿ ಮತ್ತು ಸಿಸ್ಟಮ್ ಅಸ್ಥಿರತೆಗೆ ಕಾರಣವಾಗಬಹುದು.
4. ನಿಧಾನ ಪ್ರತಿಕ್ರಿಯೆ ಪತ್ತೆ
ಕಾರ್ಯಗತಗೊಳಿಸಲು ನಿರ್ದಿಷ್ಟ ಮಿತಿಗಿಂತ ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುವ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಡೀಬಗ್ ಮೋಡ್ ಪತ್ತೆ ಮಾಡುತ್ತದೆ. ಇದು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ:
asyncio | Task was destroyed but it is pending!
pending time: 12345.678 ms
5. ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆ
ಡೀಬಗ್ ಮೋಡ್ ಕೊರೂಟೀನ್ಗಳಲ್ಲಿ ಉಂಟಾಗುವ ವಿನಾಯಿತಿಗಳಿಗೆ ಹೆಚ್ಚಿನ ಸನ್ನಿವೇಶವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದರಲ್ಲಿ ವಿನಾಯಿತಿ ಸಂಭವಿಸಿದ ಕಾರ್ಯ ಮತ್ತು ಕೊರೂಟೀನ್ ಸೇರಿವೆ:
asyncio | Task exception was never retrieved
future: () done, raised ValueError('Invalid value')>
ಈ ಔಟ್ಪುಟ್ Task-1
ನಲ್ಲಿ ValueError
ಅನ್ನು ಹೆಚ್ಚಿಸಲಾಗಿದೆ ಮತ್ತು ಅದನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸಲಾಗಿಲ್ಲ ಎಂದು ಸೂಚಿಸುತ್ತದೆ.
Asyncio ಡೀಬಗ್ ಮೋಡ್ನೊಂದಿಗೆ ಡೀಬಗ್ ಮಾಡುವ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳು
ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು asyncio
ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದರ ಕುರಿತು ಕೆಲವು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳನ್ನು ನೋಡೋಣ:
1. ಮುಚ್ಚದ ಸಾಕೆಟ್ಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು
ಸಾಕೆಟ್ ಅನ್ನು ರಚಿಸುವ ಆದರೆ ಅದನ್ನು ಸರಿಯಾಗಿ ಮುಚ್ಚದ ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಪರಿಗಣಿಸಿ:
import asyncio
import socket
async def handle_client(reader, writer):
data = await reader.read(100)
message = data.decode()
addr = writer.get_extra_info('peername')
print(f"Received {message!r} from {addr!r}")
print(f"Send: {message!r}")
writer.write(data)
await writer.drain()
# Missing: writer.close()
async def main():
server = await asyncio.start_server(
handle_client,
'127.0.0.1',
8888
)
addr = server.sockets[0].getsockname()
print(f'Serving on {addr}')
async with server:
await server.serve_forever()
if __name__ == "__main__":
asyncio.run(main(), debug=True)
ನೀವು ಈ ಕೋಡ್ ಅನ್ನು ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ, ಮುಚ್ಚದ ಸಾಕೆಟ್ ಅನ್ನು ಸೂಚಿಸುವ ResourceWarning
ಅನ್ನು ನೀವು ನೋಡುತ್ತೀರಿ:
ResourceWarning: unclosed
ಇದನ್ನು ಸರಿಪಡಿಸಲು, handle_client
ಕೊರೂಟೀನ್ನಲ್ಲಿ writer.close()
ಅನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ಮತ್ತು ಅದನ್ನು ಕಾಯುವ ಮೂಲಕ ಸಾಕೆಟ್ ಅನ್ನು ಸರಿಯಾಗಿ ಮುಚ್ಚಲಾಗಿದೆಯೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕು:
writer.close()
await writer.wait_closed()
2. ನಿಧಾನ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಗುರುತಿಸುವುದು
ನೀವು ನಿಧಾನ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸುವ ಕೊರೂಟೀನ್ ಅನ್ನು ಹೊಂದಿದ್ದೀರಿ ಎಂದು ಭಾವಿಸೋಣ:
import asyncio
import time
async def slow_function():
print("Starting slow function")
time.sleep(2)
print("Slow function finished")
return "Result"
async def main():
task = asyncio.create_task(slow_function())
result = await task
print(f"Result: {result}")
if __name__ == "__main__":
asyncio.run(main(), debug=True)
ಡೀಫಾಲ್ಟ್ ಡೀಬಗ್ ಔಟ್ಪುಟ್ ನಿಧಾನ ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ನೇರವಾಗಿ ಸೂಚಿಸದಿದ್ದರೂ, ಜಾಗರೂಕತೆಯ ಲಾಗಿಂಗ್ ಮತ್ತು ಪ್ರೊಫೈಲಿಂಗ್ ಪರಿಕರಗಳೊಂದಿಗೆ (cProfile ಅಥವಾ py-spy ನಂತಹ) ಸಂಯೋಜಿಸುವುದು ನಿಮ್ಮ ಕೋಡ್ನ ನಿಧಾನ ಭಾಗಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಸಂಭಾವ್ಯವಾಗಿ ನಿಧಾನ ಕಾರ್ಯಾಚರಣೆಗಳ ಮೊದಲು ಮತ್ತು ನಂತರ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ಗಳನ್ನು ಲಾಗ್ ಮಾಡುವುದನ್ನು ಪರಿಗಣಿಸಿ. ನಂತರ ಲಾಗ್ ಮಾಡಿದ ಫಂಕ್ಷನ್ ಕರೆಗಳಲ್ಲಿ cProfile ನಂತಹ ಪರಿಕರಗಳನ್ನು ಅಡಚಣೆಗಳನ್ನು ಬೇರ್ಪಡಿಸಲು ಬಳಸಬಹುದು.
3. ಕಾರ್ಯ ರದ್ದತಿಯನ್ನು ಡೀಬಗ್ ಮಾಡುವುದು
ಕಾರ್ಯವನ್ನು ಅನಿರೀಕ್ಷಿತವಾಗಿ ರದ್ದುಗೊಳಿಸಲಾಗುವ ಸನ್ನಿವೇಶವನ್ನು ಪರಿಗಣಿಸಿ:
import asyncio
async def worker():
try:
while True:
print("Working...")
await asyncio.sleep(0.5)
except asyncio.CancelledError:
print("Worker cancelled")
async def main():
task = asyncio.create_task(worker())
await asyncio.sleep(2)
task.cancel()
try:
await task
except asyncio.CancelledError:
print("Task cancelled in main")
if __name__ == "__main__":
asyncio.run(main(), debug=True)
ಡೀಬಗ್ ಔಟ್ಪುಟ್ ಕಾರ್ಯವನ್ನು ರದ್ದುಗೊಳಿಸುತ್ತಿರುವುದನ್ನು ತೋರಿಸುತ್ತದೆ:
asyncio | execute started at example.py:16>
Working...
Working...
Working...
Working...
asyncio | Task-1: cancelling
Worker cancelled
asyncio | Task-1: cancelled by result=None>
Task cancelled in main
ಇದು ಕಾರ್ಯವನ್ನು main()
ಕೊರೂಟೀನ್ನಿಂದ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ದೃಢಪಡಿಸುತ್ತದೆ. except asyncio.CancelledError
ಬ್ಲಾಕ್ ಸಂಪನ್ಮೂಲ ಸೋರಿಕೆಗಳು ಅಥವಾ ಸ್ಥಿರವಲ್ಲದ ಸ್ಥಿತಿಯನ್ನು ತಡೆಗಟ್ಟುವ ಕಾರ್ಯವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಕೊನೆಗೊಳಿಸುವ ಮೊದಲು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.
4. ಕೊರೂಟೀನ್ಗಳಲ್ಲಿನ ವಿನಾಯಿತಿಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು
ಅಸಮಕಾಲಿಕ ಕೋಡ್ನಲ್ಲಿ ಸರಿಯಾದ ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆ ನಿರ್ಣಾಯಕವಾಗಿದೆ. ನಿರ್ವಹಿಸದ ವಿನಾಯಿತಿಯೊಂದಿಗೆ ಕೆಳಗಿನ ಉದಾಹರಣೆಯನ್ನು ಪರಿಗಣಿಸಿ:
import asyncio
async def divide(x, y):
return x / y
async def main():
result = await divide(10, 0)
print(f"Result: {result}")
if __name__ == "__main__":
asyncio.run(main(), debug=True)
ಡೀಬಗ್ ಮೋಡ್ ನಿರ್ವಹಿಸದ ವಿನಾಯಿತಿಯನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ:
asyncio | Task exception was never retrieved
future: result=None, exception=ZeroDivisionError('division by zero')>
ಈ ವಿನಾಯಿತಿಯನ್ನು ನಿರ್ವಹಿಸಲು, ನೀವು try...except
ಬ್ಲಾಕ್ ಅನ್ನು ಬಳಸಬಹುದು:
import asyncio
async def divide(x, y):
return x / y
async def main():
try:
result = await divide(10, 0)
print(f"Result: {result}")
except ZeroDivisionError as e:
print(f"Error: {e}")
if __name__ == "__main__":
asyncio.run(main(), debug=True)
ಈಗ, ವಿನಾಯಿತಿಯನ್ನು ಸೆರೆಹಿಡಿಯಲಾಗುತ್ತದೆ ಮತ್ತು ಸಲೀಸಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ.
Asyncio ಡೀಬಗ್ ಮಾಡುವ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
asyncio
ಕೋಡ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಕೆಲವು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು ಇಲ್ಲಿವೆ:
- ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ: ಅಭಿವೃದ್ಧಿ ಮತ್ತು ಪರೀಕ್ಷೆಯ ಸಮಯದಲ್ಲಿ ಯಾವಾಗಲೂ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.
- ಲಾಗಿಂಗ್ ಅನ್ನು ಬಳಸಿ: ನಿಮ್ಮ ಕೊರೂಟೀನ್ಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಹರಿವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ವಿವರವಾದ ಲಾಗಿಂಗ್ ಅನ್ನು ಸೇರಿಸಿ. asyncio ನಿರ್ದಿಷ್ಟ ಈವೆಂಟ್ಗಳಿಗಾಗಿ
logging.getLogger('asyncio')
ಅನ್ನು ಬಳಸಿ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್-ನಿರ್ದಿಷ್ಟ ಡೇಟಾಗಾಗಿ ನಿಮ್ಮ ಸ್ವಂತ ಲಾಗರ್ಗಳನ್ನು ಬಳಸಿ. - ವಿನಾಯಿತಿಗಳನ್ನು ನಿರ್ವಹಿಸಿ: ನಿರ್ವಹಿಸದ ವಿನಾಯಿತಿಗಳು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಕ್ರ್ಯಾಶ್ ಮಾಡುವುದನ್ನು ತಡೆಯಲು ದೃಢವಾದ ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ.
- ಕಾರ್ಯ ಗುಂಪುಗಳನ್ನು ಬಳಸಿ (ಪೈಥಾನ್ 3.11+): ಕಾರ್ಯ ಗುಂಪುಗಳು ಸಂಬಂಧಿತ ಕಾರ್ಯಗಳ ಗುಂಪುಗಳಲ್ಲಿ ವಿನಾಯಿತಿ ನಿರ್ವಹಣೆ ಮತ್ತು ರದ್ದತಿಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತವೆ.
- ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಪ್ರೊಫೈಲ್ ಮಾಡಿ: ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಗಳನ್ನು ಗುರುತಿಸಲು ಪ್ರೊಫೈಲಿಂಗ್ ಪರಿಕರಗಳನ್ನು ಬಳಸಿ.
- ಘಟಕ ಪರೀಕ್ಷೆಗಳನ್ನು ಬರೆಯಿರಿ: ನಿಮ್ಮ ಕೊರೂಟೀನ್ಗಳ ನಡವಳಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಂಪೂರ್ಣ ಘಟಕ ಪರೀಕ್ಷೆಗಳನ್ನು ಬರೆಯಿರಿ.
- ಟೈಪ್ ಹಿಂಟ್ಗಳನ್ನು ಬಳಸಿ: ಟೈಪ್-ಸಂಬಂಧಿತ ದೋಷಗಳನ್ನು ಮೊದಲೇ ಕಂಡುಹಿಡಿಯಲು ಟೈಪ್ ಹಿಂಟ್ಗಳನ್ನು ಬಳಸಿ.
- ಡೀಬಗ್ಗರ್ ಅನ್ನು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ:
pdb
ಅಥವಾ IDE ಡೀಬಗ್ಗರ್ಗಳಂತಹ ಪರಿಕರಗಳನ್ನು asyncio ಕೋಡ್ ಮೂಲಕ ಹಂತ ಹಂತವಾಗಿ ಸಾಗಲು ಬಳಸಬಹುದು. ಆದಾಗ್ಯೂ, ಅಸಮಕಾಲಿಕ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ಸ್ವರೂಪದಿಂದಾಗಿ ಜಾಗರೂಕತೆಯ ಲಾಗಿಂಗ್ನೊಂದಿಗೆ ಡೀಬಗ್ ಮೋಡ್ಗಿಂತ ಅವು ಸಾಮಾನ್ಯವಾಗಿ ಕಡಿಮೆ ಪರಿಣಾಮಕಾರಿಯಾಗಿರುತ್ತವೆ.
ಸುಧಾರಿತ ಡೀಬಗ್ ಮಾಡುವ ತಂತ್ರಗಳು
ಮೂಲ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಮೀರಿ, ಈ ಸುಧಾರಿತ ತಂತ್ರಗಳನ್ನು ಪರಿಗಣಿಸಿ:
1. ಕಸ್ಟಮ್ ಈವೆಂಟ್ ಲೂಪ್ ಪಾಲಿಸಿಗಳು
ಈವೆಂಟ್ಗಳನ್ನು ಪ್ರತಿಬಂಧಿಸಲು ಮತ್ತು ಲಾಗ್ ಮಾಡಲು ನೀವು ಕಸ್ಟಮ್ ಈವೆಂಟ್ ಲೂಪ್ ಪಾಲಿಸಿಗಳನ್ನು ರಚಿಸಬಹುದು. ಇದು ಡೀಬಗ್ ಮಾಡುವ ಪ್ರಕ್ರಿಯೆಯ ಮೇಲೆ ಇನ್ನಷ್ಟು ಸೂಕ್ಷ್ಮ-ಧಾನ್ಯದ ನಿಯಂತ್ರಣವನ್ನು ಪಡೆಯಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
2. ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಡೀಬಗ್ ಮಾಡುವ ಪರಿಕರಗಳನ್ನು ಬಳಸುವುದು
ಹಲವಾರು ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಡೀಬಗ್ ಮಾಡುವ ಪರಿಕರಗಳು asyncio
ಕೋಡ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತವೆ, ಅವುಗಳೆಂದರೆ:
- PySnooper: ನಿಮ್ಮ ಕೋಡ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಲಾಗ್ ಮಾಡುವ ಪ್ರಬಲ ಡೀಬಗ್ ಮಾಡುವ ಸಾಧನ.
- pdb++: ವರ್ಧಿತ ವೈಶಿಷ್ಟ್ಯಗಳೊಂದಿಗೆ ಪ್ರಮಾಣಿತ
pdb
ಡೀಬಗ್ಗರ್ನ ಸುಧಾರಿತ ಆವೃತ್ತಿ. - asyncio_inspector: asyncio ಈವೆಂಟ್ ಲೂಪ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ನಿರ್ದಿಷ್ಟವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಲೈಬ್ರರಿ.
3. ಮಂಕಿ ಪ್ಯಾಚಿಂಗ್ (ಜಾಗರೂಕತೆಯಿಂದ ಬಳಸಿ)
ವಿಪರೀತ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಡೀಬಗ್ ಮಾಡುವ ಉದ್ದೇಶಗಳಿಗಾಗಿ asyncio
ಕಾರ್ಯಗಳ ನಡವಳಿಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಲು ನೀವು ಮಂಕಿ ಪ್ಯಾಚಿಂಗ್ ಅನ್ನು ಬಳಸಬಹುದು. ಆದಾಗ್ಯೂ, ಇದನ್ನು ಜಾಗರೂಕತೆಯಿಂದ ಮಾಡಬೇಕು, ಏಕೆಂದರೆ ಇದು ಸೂಕ್ಷ್ಮ ದೋಷಗಳನ್ನು ಪರಿಚಯಿಸಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಕಷ್ಟವಾಗುತ್ತದೆ. ಇದು ಸಂಪೂರ್ಣವಾಗಿ ಅಗತ್ಯವಿಲ್ಲದ ಹೊರತು ಸಾಮಾನ್ಯವಾಗಿ ನಿರುತ್ಸಾಹಗೊಳಿಸಲಾಗುತ್ತದೆ.
ತೀರ್ಮಾನ
ಅಸಮಕಾಲಿಕ ಕೋಡ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡುವುದು ಸವಾಲಾಗಿರಬಹುದು, ಆದರೆ asyncio
ಡೀಬಗ್ ಮೋಡ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸರಳಗೊಳಿಸಲು ಅಮೂಲ್ಯವಾದ ಪರಿಕರಗಳು ಮತ್ತು ಒಳನೋಟಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಮೂಲಕ, ಔಟ್ಪುಟ್ ಅನ್ನು ಅರ್ಥೈಸುವ ಮೂಲಕ ಮತ್ತು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನುಸರಿಸುವ ಮೂಲಕ, ನಿಮ್ಮ ಅಸಮಕಾಲಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿನ ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳನ್ನು ನೀವು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಗುರುತಿಸಬಹುದು ಮತ್ತು ಪರಿಹರಿಸಬಹುದು, ಇದು ಹೆಚ್ಚು ದೃಢವಾದ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ಕೋಡ್ಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಉತ್ತಮ ಫಲಿತಾಂಶಗಳಿಗಾಗಿ ಲಾಗಿಂಗ್, ಪ್ರೊಫೈಲಿಂಗ್ ಮತ್ತು ಸಂಪೂರ್ಣ ಪರೀಕ್ಷೆಯೊಂದಿಗೆ ಡೀಬಗ್ ಮೋಡ್ ಅನ್ನು ಸಂಯೋಜಿಸಲು ಮರೆಯದಿರಿ. ಅಭ್ಯಾಸ ಮತ್ತು ಸರಿಯಾದ ಪರಿಕರಗಳೊಂದಿಗೆ, ನೀವು asyncio
ಕೊರೂಟೀನ್ಗಳನ್ನು ಡೀಬಗ್ ಮಾಡುವ ಕಲೆಯನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ಸ್ಕೇಲೆಬಲ್, ಪರಿಣಾಮಕಾರಿ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹ ಅಸಮಕಾಲಿಕ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು.