指定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同步原语--线程 ...
随机推荐
- 83. Remove Duplicates from Sorted List【easy】
83. Remove Duplicates from Sorted List[easy] Given a sorted linked list, delete all duplicates such ...
- java的集合层次图
- int 与 string::length()
今天在代码中遇到这样的问题 ; while (nStart < strTemp.length()) { ... } 感觉自己写的逻辑没有错误,但是,代码执行结果就是不对,结果单步调试到该处发现, ...
- 使用pycharm手动搭建python语言django开发环境(一)
1)系统已经安装了python,django,pycharm 2)安装python的virtualenv模块.该模块通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,不同项目之间相 ...
- 基于AFNetworking封装的网络请求工具类【原创】
今天给大家共享一个我自己封装的网络请求类,希望能帮助到大家. 前提,导入AFNetworking框架, 关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在a ...
- tic-tac-toe游戏代码
package com.p4f.tictactoe.demo; import javax.swing.border.Border; public class Board { /** * positio ...
- 也许,这样理解HTTPS更容易_转载
转自:也许,这样理解HTTPS更容易 原文衔接:https://showme.codes/2017-02-20/understand-https/ 作者:翟志军 摘要 本文尝试一步步还原HTTPS的 ...
- ubi实际使用
ubifs号称性能比yaffs2 好,同时压缩可读写,文件系统image体较小同时可写.1. uboot使能对UBIFS的支持#define CONFIG_CMD_NAND#define CONFIG ...
- 【spring boot】在spring boot下使用多线程
使用场景: 方法处理到某一步,需要将信息交给另一个线程去处理!! =================================================================== ...
- 集合Map多对多映射(使用xml文件)
我们可以使用set,bag,map等来映射多对多关系.在这里,我们将使用map来进行多对多映射. 在这种情况下,将创建三个表. 多对多映射示例 我们需要创建以下文件来映射map元素.首先创建一个项目: ...