تقنية

aclosing في بايثون: هل break وحدها تنهي تنظيف المولد غير المتزامن؟

aclosing; own=rows(own_events); first:"bud"; break; inside:[]; after:["closed"]
خروج.

break لا تنظف مولدنا المحتفظ به؛ aclosing تنظفه عند الخروج. [1] [2]

الخلاصة السريعة

لا؛ نغلقه هنا. [1] [2]

  • break لا تنظف مولدنا المحتفظ به؛ aclosing تنظفه عند الخروج. [1] [2]
  • في CPython 3.12.14، rows مولد غير متزامن يعطي "bud" ثم "leaf"؛ finally تضيف "closed" للسجل. [1] [2]
  • مع aclosing وown_events=[]، نخرج بـbreak بعد "bud"؛ السجل داخل الكتلة [] وبعدها ["closed"]. [1] [2]
  • __aexit__ تنتظر اكتمال aclose عند الخروج. [1] [2]
  • تحكم بسجل جديد control_events=[] ومولد control=rows(control_events): بعد break يبقى [] حتى await control.aclose(). نحتفظ بالمولد ونفحصه قبل إنهاء الحلقة، بلا موارد فعلية. [1] [2]

التنظيف

break لا تنظف مولدنا المحتفظ به؛ aclosing تنظفه عند الخروج. [1] [2]

المولد

في CPython 3.12.14، rows مولد غير متزامن يعطي "bud" ثم "leaf"؛ finally تضيف "closed" للسجل. [1] [2]

الخروج

مع aclosing وown_events=[]، نخرج بـbreak بعد "bud"؛ السجل داخل الكتلة [] وبعدها ["closed"]. [1] [2]

import asyncio from contextlib import aclosing async def rows(events): try: yield "bud" yield "leaf" finally:events.append("closed") async def own_case(): own_events=[] async with aclosing(rows(own_events)) as own: async for value in own:break print(own_events) print(own_events) asyncio.run(own_case()) [1] [2]

control=rows(control_events); first:"bud"; break; before:[]; await control.aclose(); after:["closed"]
إغلاق صريح.

التحكم

__aexit__ تنتظر اكتمال aclose عند الخروج. [1] [2]

async def control_case(): control_events=[];control=rows(control_events) async for value in control:break print(control_events) await control.aclose() print(control_events) asyncio.run(control_case()) [1] [2]

تحكم بسجل جديد control_events=[] ومولد control=rows(control_events): بعد break يبقى [] حتى await control.aclose(). نحتفظ بالمولد ونفحصه قبل إنهاء الحلقة، بلا موارد فعلية. [1] [2]

المراجع

  1. Python aclosing
  2. CPython aclosing

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.