python ThreadPoolExecutor线程池使用

python有好几种实现线程池的方式,

注意选择一下,哪种是自己需要的。

最近用上ThreadPoolExecutor,

用来代替celery的方式。

主要是用在celery上的时间太少,

没有吃透,

还有,我们的应用没有复杂到那地步,

多开几个服务器,也可以实现线程池的扩展。


ThreadPoolExecutor主要有submit和map方式。

map就够用我们的场景了。


使用ThreadPoolExecutor时,需要注意的是map函数的参数是如何构造的。

(就是将cmd_run后面的参数,构造为有相同于进程池数量的参数列表!!!)

【就是参数个人为cmd_run要求的个数,但列表内的长度为进程池数量,利用率刚好】

 data为每个函数的返回值。

注意,进程的退出,不到山穷水尽,不要用os.exit()这样的函数,

python可能无法正常完成数据操作及资源回收。

最好是利用函数的返回值自然退出线程,高端些~


from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor(max_workers=xxx)

for data in executor.map(cmd_run, subserver, [deploy_type] * sub_len, [cmd] * sub_len,
                         [current_user_set] * sub_len, [percent_value] * sub_len,
                         [app_name] * sub_len, [deployversion_id] * sub_len, [auto_deploy_id] * sub_len):
    mylog.debug("cmd %s result is: " % cmd + str(data))
    if not data:
        return False





猜你喜欢

转载自yq.aliyun.com/articles/604526