python中利用concurrent.futures实现用进程池达到多进程

# from concurrent.futures import ProcessPoolExecutor
# import time
#
# def save_test(name,n):
#     n = n+1
#     time.sleep(n)
#     print("{}的名字为{}".format(name,n))
#     return n
#
# ex = ProcessPoolExecutor(max_workers=3)
# lista = ["Tom","Jerry","XiaoHua","Ming"]
#
# for i,j in enumerate(lista):
#     #存在两个以上的参数时,直接用逗号隔开,不需要用括号
#     ex.submit(save_test,j,i)
# #ex.shutdown(wait=True)是进程池内部的进程都执行完毕,才会关闭,然后执行后续代码
# ex.shutdown(wait=True)
# print("主进程直接运行")







# #同步调用:提交/调用一个任务,然后就在原地等着,等到该任务执行完毕拿到结果,再执行下一行代码
# from concurrent.futures import ProcessPoolExecutor
# import time
#
# def save_test(name,n):
#     n = n+1
#     time.sleep(n)
#     print("{}的名字次数为{}".format(name,n))
#     return n
#
#
# if __name__ == '__main__':
#     start = time.time()
#     ex = ProcessPoolExecutor(max_workers=3)
#     lista = ["Tom","Jerry","XiaoHua","Ming"]
#
#     for i,j in enumerate(lista):
#         #存在两个以上的参数时,直接用逗号隔开,不需要用括号
#         task = ex.submit(save_test,j,i).result()
#         print(task)
#     #ex.shutdown(wait=True)是进程池内部的进程都执行完毕,才会关闭,然后执行后续代码
#     ex.shutdown(wait=True)
#     print("主进程直接运行")
#     stop = time.time()
#     print(stop-start)




#异步调用: 提交/调用一个任务,不在原地等着,直接执行下一行代码
from concurrent.futures import ProcessPoolExecutor
import time

def save_test(name,n):
    n = n+1
    time.sleep(n)
    print("{}的名字次数为{}".format(name,n))
    return n


if __name__ == '__main__':
    obj = list()
    start = time.time()
    ex = ProcessPoolExecutor(max_workers=3)
    lista = ["letme","Mlxg","XiaoHu","Ming"]

    for i,j in enumerate(lista):
        #存在两个以上的参数时,直接用逗号隔开,不需要用括号
        task = ex.submit(save_test,j,i)
        obj.append(task)
    #ex.shutdown(wait=True)是进程池内部的进程都执行完毕,才会关闭,然后执行后续代码
    ex.shutdown(wait=True)
    print("主进程直接运行")
    for i in obj:
        print(i.result())
    stop = time.time()
    print(stop-start)









# from concurrent.futures import ThreadPoolExecutor, as_completed
# import time
#
# # 参数times用来模拟网络请求的时间
# def get_html(times):
#     time.sleep(times)
#     print("get page {}s finished".format(times))
#     return times
#
# executor = ThreadPoolExecutor(max_workers=2)
# urls = [3, 2, 4] # 并不是真的url
# all_task = [executor.submit(get_html, url) for url in urls]
#
#
# for future in as_completed(all_task):
#     data = future.result()
#     print("in main: get page {}s success".format(data))


#
# from concurrent.futures import ThreadPoolExecutor
# import time
#
# # 参数times用来模拟网络请求的时间
# def get_html(times):
#     time.sleep(times)
#     print("get page {}s finished".format(times))
#     return times
#
# executor = ThreadPoolExecutor(max_workers=2)
# urls = [3, 2, 4] # 并不是真的url
#
# for data in executor.map(get_html, urls):
#     print("in main: get page {}s success".format(data))


from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED, FIRST_COMPLETED
import time

# 参数times用来模拟网络请求的时间
def get_html(times):
    time.sleep(times)
    print("get page {}s finished".format(times))
    return times

executor = ThreadPoolExecutor(max_workers=2)
urls = [3, 2, 4] # 并不是真的url
all_task = [executor.submit(get_html, (url)) for url in urls]
wait(all_task, return_when=ALL_COMPLETED)
print("main")

转载于:https://my.oschina.net/mypeng/blog/2252562

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值