现在的位置: 首页 > 综合 > 正文

[Python]多线程threading — 100以内素数的查找

2013年10月03日 ⁄ 综合 ⁄ 共 833字 ⁄ 字号 评论关闭

使用threading的继承Treading的方法

#coding:utf8
'''
def isprime(m):
    #质数是指只能被1和它本身整除的数
    for i in range(2, m/2+1):
        if m % i == 0:
            return False
    return True
if __name__ == '__main__':
    print filter(isprime, range(2,101))
'''
#这里就分100线程试下,用class的方式重写
import threading 
rs = [] #用来成放满足条件的数字,最后打印用
lock = threading.RLock()
class Isprime(threading.Thread):
    '''判断一个数是不是质数'''
    def __init__(self,num,name=None):
        threading.Thread.__init__(self) #不要忘记
        self.num = num
        self.isstop = False
    
    def run(self):
        global rs,lock          
        isprime = False     
        m = self.num 
        for i in range(2, m/2+1):
            if m % i == 0:
                isprime = True
                break 
        lock.acquire() #加锁控制
        if not isprime:
            rs.append(m)
        lock.release()


                
def main():
    global rs 
    threads = []
    #装载线程
    for i in range(2,101): 
        threads.append(Isprime(i))
    #启动线程
    for x in threads:
        x.start()
    #阻塞线程直到结束
    for s in threads:
        x.join()
    #打印结果    
    print rs 
    print len(rs)  


if __name__=='__main__':
    main()

结果如下图:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
25

抱歉!评论已关闭.