いろは3010814 views
高校日本史190571 views
数学講師2886227 views
LaTeX962153 views
中学英語811710 views
中学理科1630641 views
中学社会668760 views
雑学1473612 views
ヒストリア290598 views
英語613639 views
Help
Tools
NewsSpreadsheetCalendarBookkeepingMarkdown TablesSlidesTier ListPen ToolIllustrationCrayonWatercolorPixel ArtASCII ArtPerspectiveEndless StairsGraphMind MapER DiagramFamily TreeMemeCurved TextImage EditorMosaicRetro FilterPencil SketchSwirl EffectLine ArtOCR/HighlighterMakeup EditorFaviconVideo TrimmerScrolling VideoVideo TitleColor PickerColor ExtractorBonfireFireworksWater RippleWater SplashBreaking GlassWood GrainMarble TextureCSS ButtonIcon MakerBar ChartGrouped Bar ChartStacked Bar ChartPie ChartLine ChartArea ChartStacked Area ChartScatter Plot3D Bar Chart3D Pie ChartBar Chart RaceBubble ChartPopulation PyramidPictogramEarningsCandlestick ChartInvestment RiskMortgage SimulatorCalculatorMatrix CalculatorFunction GraphPolynomial ExpansionVenn DiagramField VisualizerRubik's Cube Group TheoryTraveling SalesmanVoronoi and DelaunayFractalColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsRolling DiceCross SectionsMotion PathMechanicsWavesElectromagnetic WavesCapacitorsLight and LensesThermodynamicsHow Semiconductors WorkMolecular StructuresAtomic OrbitalsElectrochemical CellsChemical EquilibriumCrystal LatticesBuffer pHOrganic Reaction MapPeriodic TableComplex IonsDNA Double HelixCell DivisionMembrane ChannelsNerve ImpulseMuscle ContractionHormones and HomeostasisRock ClassificationWeatherConstellationsSolar and Lunar Eclipses3D ModelingFloor PlanSeismic StructuresIntersection TurnMaglevCooking AnimationOrigamiLive Viewer CountGeoJSON MapRailway MapPopulation MapCrime MapLand Price MapSchool MapShrine and Castle MapHouse of Representatives MapWord MapSolitaireReversiHakoiri MusumeChessHamburgerRippleSlide Puzzle MakerNeon PinballNovel MakerJapanese Typing PracticePiano Score EditorMusic TheoryShogi StrategyPiano Rhythm Game

English

Python の非同期ジェネレータ

非同期ジェネレータは async for で反復できる非同期イテラブルを作成します。ストリーミングデータの処理に適しています。

基本構文

async def と yield を組み合わせて定義します。

import asyncio

async def async_counter(n):
    for i in range(n):
        await asyncio.sleep(0.5)
        yield i

async def main():
    async for num in async_counter(5):
        print(num)

asyncio.run(main())

0 から 4 まで、0.5 秒間隔で出力されます。

実用例:ページネーション

API からデータを順次取得する例です。

import asyncio

async def fetch_pages(total_pages):
    for page in range(1, total_pages + 1):
        await asyncio.sleep(0.5)  # API呼び出しをシミュレート
        yield {"page": page, "data": f"Content of page {page}"}

async def main():
    async for page_data in fetch_pages(3):
        print(page_data)

asyncio.run(main())

非同期内包表記

async for はリスト内包表記でも使えます。

async def main():
    results = [num async for num in async_counter(5)]
    print(results)  # [0, 1, 2, 3, 4]

通常のジェネレータとの違い

同期ジェネレータ

def + yield で定義。for で反復。

非同期ジェネレータ

async def + yield で定義。async for で反復。

非同期ジェネレータは、データが到着するたびに処理を進められるため、リアルタイムデータの処理やストリーミング API との連携に有用です。