指定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:

[email protected]PC:TASK2$ python threadsNum.py
start fib13 at: Sun Sep  7 16:11:23 2014
start fib11 at: Sun Sep  7 16:11:23 2014
start fib15 at: Sun Sep  7 16:11:23 2014
end fib11 at: Sun Sep  7 16:11:24 2014
start fib12 at: Sun Sep  7 16:11:24 2014
end fib12 at: Sun Sep  7 16:11:26 2014
start fib14 at: Sun Sep  7 16:11:26 2014
end fib13 at: Sun Sep  7 16:11:26 2014
377
144
end fib14 at: Sun Sep  7 16:11:33 2014
end fib15 at: Sun Sep  7 16:11:33 2014
987
233
610

Reference:

Python继承类的方式实现多线程及控制线程数: http://lihuipeng.blog.51cto.com/3064864/1322247

时间: 2024-11-05 16:02:36

指定Python线程数目的相关文章

Python线程和协程-day10

写在前面 上课第10天,打卡: 感谢Egon老师细致入微的讲解,的确有学到东西! 一.线程 1.关于线程的补充 线程:就是一条流水线的执行过程,一条流水线必须属于一个车间: 那这个车间的运行过程就是一个进程: 即一个进程内,至少有一个线程: 进程是一个资源单位,真正干活的是进程里面的线程: 线程是一个执行单位: 多线程:一个车间内有多条流水线,多个流水线共享该车间的资源: 一个进程内有多个线程,多线程共享一个进程的资源: 线程创建的开销要远远小于创建进程的开销: 进程之间更多的是一种竞争关系:

python线程同步(2)

Barrier 有人翻译成栅栏,建议使用屏障,可以想象成路障,道闸. 3.2引入python的新功能. Barrier(parties,action  = None,timeout = None):构建Barrier对象,指定参与方数目,timeout是wait方法未指定超时的默认值. n_waiting:当前在屏障中等待的线程数. parties:各方数,就是需要多少个等待. wait(timeout = None):等待通过屏障,返回0到线程数减1的整数,每个线程返回不同.如果wait方法设

[python] 线程简介

参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了

python线程详解

#线程状态 #线程同步(锁)#多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题. #threading模块#常用方法:'''threading.currentThread():返回当前的线程变量threading.enumerate():返回一个包含正在运行的线程的list,正在运行指:线程启动后,结束前,不包含启动前和终止后的线程threading.activeCount():返回正在运行的线程数量,与len(threading.en

Python线程指南(转)

1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在数据不同步的问题.考虑这样一种情况:一个列表里所有元素都是0,线程"set"从后向前把所有元素改成1,而线程"print"负责从前往后读取列表并打印.那么,可能线程"set"开始改的时候,线程"print"便来打印列表了,输出就成

python线程、进程、协程

进程与线程之间的定义 计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控制块三

Python线程、进程知识整理

一.python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time   def show(arg):     time.sleep(1)     print 'thread'+str(arg)   for i in range(10):     t = t

线程池Python 线程、进程和协程

Python   线程 Threading是用于提供线程相关的操作,线程是应用程序中工作的最小单元.线程与进程的关系下图所示: 子线程是由主线程产生的,但两者并没有关联. 利用threading创建线程: 1 '''利用threading包创建''' 2 import threading 3 import time 4 5 def run(n): 6 time.sleep(2) 7 print("task:",n) 8 9 '''串行:一个运行完后,再运行另外一个''' 10 run(

[python] ThreadPoolExecutor线程池 python 线程池

初识 Python中已经有了threading模块,为什么还需要线程池呢,线程池又是什么东西呢?在介绍线程同步的信号量机制的时候,举得例子是爬虫的例子,需要控制同时爬取的线程数,例子中创建了20个线程,而同时只允许3个线程在运行,但是20个线程都需要创建和销毁,线程的创建是需要消耗系统资源的,有没有更好的方案呢?其实只需要三个线程就行了,每个线程各分配一个任务,剩下的任务排队等待,当某个线程完成了任务的时候,排队任务就可以安排给这个线程继续执行. 这就是线程池的思想(当然没这么简单),但是自己编