相关疑难解决方法(0)

如何使用带超时的concurrent.futures?

我试图使用concurrent.futures模块在python3.2中使用超时.但是当它超时时,它并没有真正停止执行.我尝试了两个线程和进程池执行程序,它们都没有停止任务,只有在完成后才会引发超时.那么有谁知道它是否有可能使这个工作?

import concurrent.futures
import time
import datetime

max_numbers = [10000000, 10000000, 10000000, 10000000, 10000000]

def run_loop(max_number):
    print("Started:", datetime.datetime.now(), max_number)
    last_number = 0;
    for i in range(1, max_number + 1):
        last_number = i * i
    return last_number

def main():
    with concurrent.futures.ProcessPoolExecutor(max_workers=len(max_numbers)) as executor:
        try:
            for future in concurrent.futures.as_completed(executor.map(run_loop, max_numbers, timeout=1), timeout=1):
                print(future.result(timeout=1))
        except concurrent.futures._base.TimeoutError:
            print("This took to long...")

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python concurrency timeout python-3.x

15
推荐指数
2
解决办法
1万
查看次数

concurrent.futures的各个超时

我看到两种指定超时的方法concurrent.futures.

  • as_completed()
  • wait()

两种方法都处理N运行期货.

我想为每个未来指定一个单独的超时.

使用案例:

  • 从数据库获取数据的未来超时为0.5秒.
  • 从HTTP服务器获取数据的未来超时为1.2秒.

我该如何处理concurrent.futures?或者这个库不是正确的工具吗?

结论

python parallel-processing concurrency concurrent.futures

12
推荐指数
1
解决办法
411
查看次数