Python 에서 async 를 처음으로 써봤다.

2024-10-29

openai api 를 써서 gpt 로 뭔가를 생성하는 program 을 작성했다. test data 를 순회하며, prompt 를 완성하고, api 를 호출한다. 그런데 체감 시간이 길다.

client = get_openai_client()

def process(datum: ...) -> ...:
    content = fill(prompt, datum) 
    message = {"role": "user", "content": content}
    chat_completion = client.chat.completions.create(messages=[message], model=model)
    chat_completion_message_content = chat_completion.choices[0].message.content
    ...
    
results = [process(datum) for datum in data]
...

순차적으로 api 를 호출하는 대신, parallel 하게 호출하면 더 빨라질 것이다.

import asyncio


client = get_openai_async_client()

async def process(datum: ...) -> ...:
    content = fill(prompt, datum) 
    message = {"role": "user", "content": content}
    chat_completion = await client.chat.completions.create(messages=messages, model=model)
    chat_completion_message_content = chat_completion.choices[0].message.content
    ...

tasks = [process(datum) for datum in data]
results = await asyncio.gather(*tasks)
...

elapsed time 이 ~240 seconds 에서 ~20 seconds 로 감소했다.