指定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同步原语--线程 ...
随机推荐
- 无序列表li横向排列
一.横向两列方式排列: 在网页中,很多地方都会用到无序列表横向排列的形式,通常的写法都是使得li的css样式设置为:float:left的形式即可,li会依次从最左边开始并列对齐, 例如: HTML中 ...
- 李洪强iOS开发之大神必备的Xcode插件
iOS开发大神必备的Xcode插件 写在前面 工欲善其事,必先利其器,iOS开发中不仅要学会Xcode的基本操作,而且还得学会一些Xcode的使用技巧,如掌握常用的快捷键等,还有就是今天要说到的Xco ...
- ActionBar + ViewPager(PagerSlidingTabStrip)
既然是要实现ActionBar.那么第一步当然就是编辑menu文件夹下的main.xml文件了.代码例如以下所看到的: <menu xmlns:android="http://sche ...
- thinkphp5中的一些关于命名空间的tisp
1.thinkphp5中公共函数文件common中,不需要use,也可以直接使用vendor中的类文件. 2.在类前面的反斜杠作用是,直接使用最外层的命名空间,有时不想use某个X类,却想使用X类时, ...
- PHP 几种 序列化/反序列化的方法
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...
- X264参考手册
艺搜简介 基本语法: x264 [options]-o outfile infile 注意与ffmpeg的输入输出文件位置恰好相反: ffmpeg[options][[infile options]- ...
- htm5 俄罗斯方块
<!DOCTYPE html> <html manifest="tetris.manifest"> <!--在HTML标签里manifest=”cac ...
- ios --图片文字组合头像那点事
/** 图片文字组合头像那点事 @param string 昵称 @param imageSize 图片尺寸 @param imageColor 图片颜色 @return 返回的 图片 */ + (U ...
- linux命令小结
查看IP ip a 测试ip ping 10.0.0.128 测试端口 telnet 10.0.0.128 22 # telnet + ip + 端口 Linux - CentOS 7. ...
- tomcat访问日志分析
常使用web服务器的朋友大都了解,一般的web server有两部分日志: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 二是访问日志信息,它记录的访问的时间,IP,访问的资 ...