スターエンジニアになりたい

異世界転生を待って早10年

python のお手軽な非同期処理 async coroutines #3

ハロー. どうも hkrblog です.
最近寒いですね~~~~~~.

今日はpython の非同期処理をやってみました.
といっても3か月くらい前に書いたものがあったので、そのときのサンプル貼りますww

Pythonの仕事から離れて今はJavaのお仕事なので、最近python全然書いてないwww
結局公式読むのが一番はやいっっ.
サンプルはこんな感じです.

import asyncio
import random

""" This code output sample
いらっしゃいませ (customer_number : 1)
いらっしゃいませ (customer_number : 2)
Water 1点で100円です (customer_number : 1)
いらっしゃいませ (customer_number : 3)
Cola 1点で100円です (customer_number : 2)
Cola 1点で100円です (customer_number : 3)
ありがとうございました (customer_number : 1)
ありがとうございました (customer_number : 2)
ありがとうございました (customer_number : 3)
"""


async def display_items():
    delay = random.randrange(4)
    await asyncio.sleep(delay)


async def get_item_from_customer():
    delay = random.randrange(8)
    await asyncio.sleep(delay)
    item = random.choice(['Cola', 'Rice Ball', 'Water'])
    return item


async def get_payment():
    delay = random.randrange(10)
    await asyncio.sleep(delay)


async def work(customer_number):
    await display_items()
    print('いらっしゃいませ (customer_number : {})'.format(customer_number))
    item = await get_item_from_customer()
    print('{} 1点で100円です (customer_number : {})'.format(item, customer_number))
    await get_payment()
    print('ありがとうございました (customer_number : {})'.format(customer_number))


# Create coroutines
coroutines = asyncio.gather(
    work(1), work(2), work(3)
)

# Event loop
loop = asyncio.get_event_loop()
loop.run_until_complete(coroutines)
loop.close()

ちょっといろいろ雑なんだけど店員の仕事を表しております...
ランダムにdelayを作って、わかりやすくしてみました.(雑ですみませんw)

では #4でまたお会いしましょう.