이상한 발견을했을 때 Python의 asyncio
을 사용하여 수면 정렬 (https://rosettacode.org/wiki/Sorting_algorithms/Sleep_sort)을 구현하기로 결정했습니다. 음수 값으로 작동하고 즉시 0을 반환합니다! 여기 asyncio.sleep은 어떻게 음수 값으로 작동합니까?
import asyncio
import random
async def sleepy(value):
return await asyncio.sleep(value, result=value)
async def main(input_values):
result = []
for sleeper in asyncio.as_completed(map(sleepy, input_values)):
result.append(await sleeper)
print(result)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
input_values = list(range(-5, 6))
random.shuffle(input_values)
loop.run_until_complete(main(input_values))
코드는 예상대로 실행하는 데 5 초 정도 걸리지 만, 결과는 항상 [0, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5]
입니다. 나는 즉시 반환하는 0을 이해할 수 있지만, 어떻게 음수 값이 올바른 순서로 되돌아 오는가?
[heapq] (https://docs.python.org/3.5/library/heapq.html)는 예정 시간을 사용하여 콜백을 정렬하는 데 사용됩니다. 즉, 수면 정렬은 실제로 [heapsort] (https : //en.wikipedia.org/wiki/Heapsort) – Vincent
고마워, 잘 알고있다. – user1475412