from threading import Thread
from time import sleep
from Queue import Queue
def firstresult(*functions):
queue = Queue()
threads = []
for f in functions:
def thread_main():
queue.put(f())
thread = Thread(target=thread_main)
threads.append(thread)
thread.start()
result = queue.get()
return result
def slow():
sleep(1)
return 42
def fast():
return 0
if __name__ == '__main__':
print firstresult(slow, fast)
ZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZApmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCmZyb20gUXVldWUgaW1wb3J0IFF1ZXVlCgpkZWYgZmlyc3RyZXN1bHQoKmZ1bmN0aW9ucyk6CiAgICBxdWV1ZSA9IFF1ZXVlKCkKICAgIHRocmVhZHMgPSBbXSAKICAgIGZvciBmIGluIGZ1bmN0aW9uczoKICAgICAgICBkZWYgdGhyZWFkX21haW4oKToKICAgICAgICAgICAgcXVldWUucHV0KGYoKSkKICAgICAgICB0aHJlYWQgPSBUaHJlYWQodGFyZ2V0PXRocmVhZF9tYWluKQogICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZCkKICAgICAgICB0aHJlYWQuc3RhcnQoKQogICAgcmVzdWx0ID0gcXVldWUuZ2V0KCkKICAgIHJldHVybiByZXN1bHQKCmRlZiBzbG93KCk6CiAgICBzbGVlcCgxKQogICAgcmV0dXJuIDQyIAoKZGVmIGZhc3QoKToKICAgIHJldHVybiAwCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHJpbnQgZmlyc3RyZXN1bHQoc2xvdywgZmFzdCk=