指定Python线程数目
可以通过threading.semaphore()来指定并行运行的Python线程的数目。
#!/usr/bin/python2.7
#File: threadsNum.py
#Author: lxw
#Time: 2014-09-07
#Usage: Demonstration for control the number of threads. import threading
from myThread import MyThread
from time import sleep def fib(x):
sleep(0.005)
if x < 2:
return 1
return fib(x-2) + fib(x-1) argList = [13, 11, 15, 12, 14] def main():
#Limit the number of threads to 3.
threadingNum = threading.Semaphore(3)
threads = []
for arg in argList:
t = MyThread(fib, (arg,), threadingNum, fib.__name__+str(arg))
threads.append(t) #There are 5 threads in all, but at most 3 of them run at the same time.
for thread in threads:
thread.start() for thread in threads:
#if t is threading.currentThread():
# continue
thread.join()
print(thread.getResult()) if __name__ == '__main__':
main()
else:
print('Being imported as a module.')
其中用到的myThread.py如下:
#!/usr/bin/python2.7
#File: myThread.py
#Author: lxw
#Time: 2014-09-06 import threading
from time import ctime class MyThread(threading.Thread):
def __init__(self, func, args, num, name=""):
#if the subclass overrides the constructor, it must make sure to invoke the base class constructor (Thread.__init__()) before doing anything else to the thread.
threading.Thread.__init__(self)
self.func = func
self.args = args
self.threadingNum = num
self.name = name def getResult(self):
return self.res def run(self):
#NOTE: "with".
with self.threadingNum:
print("start {0} at: {1}".format(self.name, ctime()))
self.res = apply(self.func, self.args)
print("end {0} at: {1}".format(self.name, ctime()))
Output:
lxw@lxw-PC:TASK2$ python threadsNum.py
start fib13 at: Sun Sep ::
start fib11 at: Sun Sep ::
start fib15 at: Sun Sep ::
end fib11 at: Sun Sep ::
start fib12 at: Sun Sep ::
end fib12 at: Sun Sep ::
start fib14 at: Sun Sep ::
end fib13 at: Sun Sep :: end fib14 at: Sun Sep ::
end fib15 at: Sun Sep ::
通过下面的输出结果我们能够更好地了解(最多允许5个线程同时运行):
lxw GetIPMultiThread$ python getIP.py
start at: Wed Mar ::
start at: Wed Mar ::
start at: Wed Mar ::
start at: Wed Mar ::
start at: Wed Mar ::
end at: Wed Mar ::
start at: Wed Mar ::
end at: Wed Mar ::
start at: Wed Mar ::
end at: Wed Mar ::
start at: Wed Mar ::
end at: Wed Mar ::
start at: Wed Mar ::
end at: Wed Mar ::
start at: Wed Mar ::
end at: Wed Mar ::
end at: Wed Mar ::
end at: Wed Mar ::
end at: Wed Mar ::
Reference:
Python继承类的方式实现多线程及控制线程数: http://lihuipeng.blog.51cto.com/3064864/1322247
指定Python线程数目的更多相关文章
- Python线程和协程-day10
写在前面 上课第10天,打卡: 感谢Egon老师细致入微的讲解,的确有学到东西! 一.线程 1.关于线程的补充 线程:就是一条流水线的执行过程,一条流水线必须属于一个车间: 那这个车间的运行过程就是一 ...
- Python线程和协程
写在前面 好好学习 天天向上 一.线程 1.关于线程的补充 线程:就是一条流水线的执行过程,一条流水线必须属于一个车间: 那这个车间的运行过程就是一个进程: 即一个进程内,至少有一个线程: 进程是一个 ...
- Python 线程池模块threadpool 、 concurrent.futures 的 ThreadPoolExecutor
一.threadpool 基本用法 pip install threadpool pool = ThreadPool(poolsize) requests = makeRequests(some_ ...
- [python] 线程池
特别感谢simomo 什么是线程池? 诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务.构建服务器应用程序的一个过于简单的模型是:每当一 ...
- [python] 线程简介
参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件 ...
- python线程使用场景 多线程下载
http://blog.xiayf.cn/2015/09/11/parallelism-in-one-line http://python.jobbole.com/84327/ http://www. ...
- Semaphore (通常用于限制可以访问某些资源(物理或逻辑的)的线程数目)
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目.例如,下面的类使用信号量控制对内容池的访问: 方法详解: 构造方法摘要 Semaphore(int permits) ...
- python 线程(一)理论部分
Python线程 进程有很多优点,它提供了多道编程,可以提高计算机CPU的利用率.既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的. 主要体现在一下几个方面: 进程只能在 ...
- python线程同步原语--源码阅读
前面两篇文章,写了python线程同步原语的基本应用.下面这篇文章主要是通过阅读源码来了解这几个类的内部原理和是怎么协同一起工作来实现python多线程的. 相关文章链接:python同步原语--线程 ...
随机推荐
- varnish学习笔记
varnish cache是一款开源的高性能的缓存server.和老牌的Squid对照有例如以下长处. 1:varnish是基于内存缓存数据的,所以处理速度比Squid要快. 2:varnish支持更 ...
- mysql5.6乱码
安装MySql5.6版本遇到一个问题,字符集乱码,如下图 由于是新安装的本地数据库,所以一定是配置的事情,查询数据库字符集配置,如下: show VARIABLES like '%char%'; 有两 ...
- FreeBSD编译安装emacs,不要用ports
1. 解压emacs 2. 进入解压之后的目录,执行configure命令,大体配置如下: ./configure --with-x-toolkit=no --with-xpm=no --with-j ...
- Problem H. The Fence 通过取余判重,求得某个区间的某些个数为某个数的倍数。
/** 题目:Problem H. The Fence 链接:https://vjudge.net/problem/Gym-101090H 题意:给定一个字符串,只有0或者1: 问:假如两个不同的1之 ...
- Muduo网络库源代码分析(六)TcpConnection 的生存期管理
TcpConnection是使用shared_ptr来管理的类,由于它的生命周期模糊.TcpConnection表示已经建立或正在建立的连接.建立连接后,用户仅仅须要在上层类如TcpServer中设置 ...
- ECharts:企业报表工具
ECharts.纯Javascript图表库,基于Canvas,底层依赖ZRender.商业产品经常使用图表库,提供直观,生动.可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫 ...
- MPEG 编解码相关资料收集
以下是我搜集的关于MPEG1/2的编解码相关的资料: (注:mpge帧内编码是基于jpeg编码的,所以请务必先理解jpeg的编解码原理.) 1:Introduction to MPEG 2 Video ...
- Machine Learning第十周笔记:大规模机器学习
博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Andrew Ng在Cousera上的Machine Learning的第 ...
- 高性能图片服务器–ZIMG(转)
2011年李彦宏在百度联盟峰会上就提到过互联网的读图时代已经到来1,图片服务早已成为一个互联网应用中占比很大的部分,对图片的处理能力也相应地变成企业和开发者的一项基本技能.需要处理海量图片的典型应用有 ...
- UIWebView加载ANSI格式的txt文件出现乱码问题解决
//若为txt文档 if([encodedString hasSuffix:@".txt"]){ NSData* Data = ...