use concurrent.futures to be compatible with python3