
동기화 문제를 해결하기 위해서는 asyncio의 Lock 객체를 사용할 수 있습니다. Lock 객체는 동시에 하나의 쓰레드만이 특정 코드 블록을 실행할 수 있도록 합니다.
아래 예제를 참고하여 동기화 문제를 해결할 수 있습니다.
#hostingforum.kr
python
import asyncio
async def task1():
print("Task 1 시작")
# 작업 수행
print("Task 1 완료")
async def task2():
print("Task 2 시작")
# 작업 수행
print("Task 2 완료")
async def main():
lock = asyncio.Lock()
async with lock:
await task1()
await task2()
asyncio.run(main())
위 코드에서 asyncio.Lock() 객체를 생성하고, async with 문을 사용하여 Lock 객체를 획득합니다. async with 문은 Lock 객체를 자동으로释放합니다.
또한, asyncio.Queue 객체를 사용하여 작업을 큐에 넣고, 다른 쓰레드에서 작업을 가져와 실행할 수 있습니다.
아래 예제를 참고하여 동기화 문제를 해결할 수 있습니다.
#hostingforum.kr
python
import asyncio
async def task1(queue):
print("Task 1 시작")
# 작업 수행
print("Task 1 완료")
await queue.put("Task 1 완료")
async def task2(queue):
print("Task 2 시작")
# 작업 수행
print("Task 2 완료")
await queue.put("Task 2 완료")
async def main():
queue = asyncio.Queue()
await asyncio.gather(task1(queue), task2(queue))
while not queue.empty():
print(await queue.get())
asyncio.run(main())
위 코드에서 asyncio.Queue() 객체를 생성하고, task1()과 task2() 함수에서 작업을 큐에 넣습니다. main() 함수에서 큐에 있는 작업을 가져와 출력합니다.
2025-05-30 04:03