利用线程池启动线程


submitmap启动线程

利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制

 from concurrent.futures import ThreadPoolExecutor as tpe
from concurrent.futures import ProcessPoolExecutor as ppe
from time import ctime, sleep
from random import randint def foo(x, name):
print('%s%d starting at' % (name, x), ctime())
sleep(randint(1, 7))
print('%s%d completed at' % (name, x), ctime()) # Use submit function
print('-----Using submit function-----')
#executor = tpe(7)
#with executor:
with tpe(7) as executor:
for i in range(5):
executor.submit(foo, i, 'No.') # Use map function
print('-----Using map function-----')
with tpe(7) as executor:
executor.map(foo, range(5), ['No_a.', 'No_b.', 'No_c.', 'No_d.', 'No_e.']) # TODO: Learn more about ProcessPoolExecutor
"""
with ppe(2) as executor:
executor.submit(foo, 1, 'No.')
"""

定义foo方法,并运用两种方式启动线程池执行器,其中with tpe(7) as executor语句等价于executor = tpe(), with executor,with的上下文管理可以保证执行器在所有submit的foo函数完成之前挂起等待。

运行得到结果

-----Using submit function-----
No.0 starting at Wed Aug 2 14:33:06 2017
No.1 starting at Wed Aug 2 14:33:06 2017
No.2 starting at Wed Aug 2 14:33:06 2017
No.3 starting at Wed Aug 2 14:33:06 2017
No.4 starting at Wed Aug 2 14:33:06 2017
No.2 completed at Wed Aug 2 14:33:07 2017
No.0 completed at Wed Aug 2 14:33:08 2017
No.3 completed at Wed Aug 2 14:33:08 2017
No.1 completed at Wed Aug 2 14:33:09 2017
No.4 completed at Wed Aug 2 14:33:13 2017
-----Using map function-----
No_a.0 starting at Wed Aug 2 14:33:13 2017
No_b.1 starting at Wed Aug 2 14:33:13 2017
No_c.2 starting at Wed Aug 2 14:33:13 2017
No_d.3 starting at Wed Aug 2 14:33:13 2017
No_e.4 starting at Wed Aug 2 14:33:13 2017
No_b.1 completed at Wed Aug 2 14:33:14 2017
No_c.2 completed at Wed Aug 2 14:33:14 2017
No_d.3 completed at Wed Aug 2 14:33:14 2017
No_a.0 completed at Wed Aug 2 14:33:18 2017
No_e.4 completed at Wed Aug 2 14:33:18 2017

查看结果可以看出,两者效果相近。

未完待续...

相关阅读


1. concurrent.future 模块

Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程的更多相关文章

  1. 高并发的epoll+线程池,线程池专注实现业务

    我们知道,服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理.通常多线程模型下 ...

  2. .NET线程池最大线程数的限制-记一次IIS并发瓶颈

    .NET ThreadPool 最大线程数的限制 IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数.这些这里就不展开.主要是最近因为过度使用Task 导致的线程数占用过多, ...

  3. java并发编程(十五)----(线程池)java线程池简介

    好的软件设计不建议手动创建和销毁线程.线程的创建和销毁是非常耗 CPU 和内存的,因为这需要 JVM 和操作系统的参与.64位 JVM 默认线程栈是大小1 MB.这就是为什么说在请求频繁时为每个小的请 ...

  4. java并发编程(十七)----(线程池)java线程池架构和原理

    前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...

  5. 《Go语言实战》摘录:6.1 并发 - 并行 与 并发

    6.1 并行 与 并发

  6. java并发编程(十八)----(线程池)java线程池框架Fork-Join

    还记得我们在初始介绍线程池的时候提到了Executor框架的体系,到现在为止我们只有一个没有介绍,与ThreadPoolExecutor一样继承与AbstractExecutorService的For ...

  7. Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

  8. C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定

    思路来源:http://bbs.csdn.NET/topics/390819824,引用该页面某网友提供的方法. 题目:我现在有100个任务,需要多线程去完成,但是要限定同时并发数量不能超过5个. 原 ...

  9. java并发编程(十六)----(线程池)java线程池的使用

    上节我们简单介绍了线程池,这次我们就来使用一下.Executors提供四种线程池,分别是:newCachedThreadPool,newFixedThreadPool ,newScheduledThr ...

随机推荐

  1. 剑指Offer - 九度1515 - 打印1到最大的N位数

    剑指Offer - 九度1515 - 打印1到最大的N位数2013-11-30 01:11 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一组测试样例.对于每个测试案 ...

  2. 《Cracking the Coding Interview》——第16章:线程与锁——题目5

    2014-04-27 20:16 题目:假设一个类Foo有三个公有的成员方法first().second().third().请用锁的方法来控制调用行为,使得他们的执行循序总是遵从first.seco ...

  3. (原)Unreal源码搬山-动画篇 自定义动画节点(一)

    @author:黑袍小道 太忙了,来更新下,嘿嘿 前言: 本文是接着上文 Unreal搬山之动画模块_Unreal动画流程和框架,进行简单入门如何自定义动画图标的AnimNode. 正文: 一.Ani ...

  4. Oz 创建CentOS7镜像

    参考链接: https://github.com/clalancette/oz/wiki/Oz-template-description-language https://github.com/cla ...

  5. HDU 3954 Level up (线段树特殊懒惰标记)

    http://blog.csdn.net/acm_cxlove/article/details/7548087 感觉最巧的是定义了min_dis……将区间内有无英雄升级分开处理 #include &l ...

  6. linux configuration

    sudo vi /etc/profile export JAVA_HOME=/usr/bin/jdk1.8.0_40export JRE_HOME=${JAVA_HOME}/jre  export C ...

  7. JSP/Servlet Web 学习笔记 DayOne

    JSP概述 1)JSP是一种动态网页技术标准,它是在传统的页面HTML文件中插入Java程序段和JSP标记(tag),从而形成JSP文件(*.jsp),也称JSP页面. 2)JSP容器是一个支持JSP ...

  8. 设置EntityFramework中decimal类型数据精度问题(EF默认将只会保留到2为精度)

    原文:设置EntityFramework中decimal类型数据精度 EF中默认的decimal数据精度为两位数,当我们数据库设置的精度大于2时,EF将只会保留到2为精度. e.g. .19990将会 ...

  9. 2017 多校3 hdu 6061 RXD and functions

    2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...

  10. Pandas之Series

    # Series 数据结构 # Series 是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为索引 import numpy as np impor ...