from threading import Timer
from queue import Queue
from random import shuffle
from time import time
def is_sorted(l):
return all(a <= b for a, b in zip(l[:-1], l[1:]))
limit = 10
m = 0
q = Queue()
sorted = False
while not sorted:
m += 1
start = time()
l = list(range(1,limit+1))
shuffle(l)
for n in l:
Timer(n * m / 1.0e3, lambda: q.put(n)).start()
sorted = is_sorted([q.get() for i in range(limit)])
print("limit,{0}; m,{1}; time(sec),{2}; sorted,{3}".format(limit,m,time()-start,sorted))
# limit,100; m,1; time(sec),0.1221776008605957; sorted,False
# limit,100; m,2; time(sec),0.2172226905822754; sorted,False
# limit,100; m,3; time(sec),0.3354020118713379; sorted,False
# limit,100; m,4; time(sec),0.45334887504577637; sorted,False
# limit,100; m,5; time(sec),0.5745019912719727; sorted,False
# limit,100; m,6; time(sec),0.6506564617156982; sorted,False
# limit,100; m,7; time(sec),0.7495026588439941; sorted,False
# limit,100; m,8; time(sec),0.8507623672485352; sorted,False
# limit,100; m,9; time(sec),0.9376990795135498; sorted,False
# limit,100; m,10; time(sec),1.0557076930999756; sorted,False
# limit,100; m,11; time(sec),1.1280319690704346; sorted,False
# limit,100; m,12; time(sec),1.2193403244018555; sorted,True
ZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRpbWVyCmZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCmZyb20gcmFuZG9tIGltcG9ydCBzaHVmZmxlCmZyb20gdGltZSBpbXBvcnQgdGltZQoKZGVmIGlzX3NvcnRlZChsKToKCXJldHVybiBhbGwoYSA8PSBiIGZvciBhLCBiIGluIHppcChsWzotMV0sIGxbMTpdKSkKCmxpbWl0ID0gMTAKbSA9IDAKcSA9IFF1ZXVlKCkKc29ydGVkID0gRmFsc2UKCndoaWxlIG5vdCBzb3J0ZWQ6CgltICs9IDEKCXN0YXJ0ID0gdGltZSgpCglsID0gbGlzdChyYW5nZSgxLGxpbWl0KzEpKQoJc2h1ZmZsZShsKQoKCWZvciBuIGluIGw6CgkJIFRpbWVyKG4gKiBtIC8gMS4wZTMsIGxhbWJkYTogcS5wdXQobikpLnN0YXJ0KCkKCglzb3J0ZWQgPSBpc19zb3J0ZWQoW3EuZ2V0KCkgZm9yIGkgaW4gcmFuZ2UobGltaXQpXSkKCXByaW50KCJsaW1pdCx7MH07IG0sezF9OyB0aW1lKHNlYyksezJ9OyBzb3J0ZWQsezN9Ii5mb3JtYXQobGltaXQsbSx0aW1lKCktc3RhcnQsc29ydGVkKSkKCQoKIyBsaW1pdCwxMDA7IG0sMTsgdGltZShzZWMpLDAuMTIyMTc3NjAwODYwNTk1Nzsgc29ydGVkLEZhbHNlCiMgbGltaXQsMTAwOyBtLDI7IHRpbWUoc2VjKSwwLjIxNzIyMjY5MDU4MjI3NTQ7IHNvcnRlZCxGYWxzZQojIGxpbWl0LDEwMDsgbSwzOyB0aW1lKHNlYyksMC4zMzU0MDIwMTE4NzEzMzc5OyBzb3J0ZWQsRmFsc2UKIyBsaW1pdCwxMDA7IG0sNDsgdGltZShzZWMpLDAuNDUzMzQ4ODc1MDQ1Nzc2Mzc7IHNvcnRlZCxGYWxzZQojIGxpbWl0LDEwMDsgbSw1OyB0aW1lKHNlYyksMC41NzQ1MDE5OTEyNzE5NzI3OyBzb3J0ZWQsRmFsc2UKIyBsaW1pdCwxMDA7IG0sNjsgdGltZShzZWMpLDAuNjUwNjU2NDYxNzE1Njk4Mjsgc29ydGVkLEZhbHNlCiMgbGltaXQsMTAwOyBtLDc7IHRpbWUoc2VjKSwwLjc0OTUwMjY1ODg0Mzk5NDE7IHNvcnRlZCxGYWxzZQojIGxpbWl0LDEwMDsgbSw4OyB0aW1lKHNlYyksMC44NTA3NjIzNjcyNDg1MzUyOyBzb3J0ZWQsRmFsc2UKIyBsaW1pdCwxMDA7IG0sOTsgdGltZShzZWMpLDAuOTM3Njk5MDc5NTEzNTQ5ODsgc29ydGVkLEZhbHNlCiMgbGltaXQsMTAwOyBtLDEwOyB0aW1lKHNlYyksMS4wNTU3MDc2OTMwOTk5NzU2OyBzb3J0ZWQsRmFsc2UKIyBsaW1pdCwxMDA7IG0sMTE7IHRpbWUoc2VjKSwxLjEyODAzMTk2OTA3MDQzNDY7IHNvcnRlZCxGYWxzZQojIGxpbWl0LDEwMDsgbSwxMjsgdGltZShzZWMpLDEuMjE5MzQwMzI0NDAxODU1NTsgc29ydGVkLFRydWU=