私は奇妙な発見をしたときにPythonのasyncio
を使ってsleep sort(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]
次のとおりです。ここで
コードは(あなたがここhttps://repl.it/DYTZそれを実行することができます)です。私はすぐに戻り値0を理解できますが、負の値はどのように正しい順序で戻ってきますか?
[heapq](https://docs.python.org/3.5/library/heapq.html)は、予定時刻を使用してコールバックをソートするために使用されます。つまり、スリープソートは実際には[ヒープソート](https ://en.wikipedia.org/wiki/Heapsort) – Vincent
おかげで、知っておいてよかったです。 – user1475412