您的位置:首页 > 编程语言 > Python开发

python编程实现通过多线程的方式来求2000~3000之间的所有的素数

2017-08-02 19:47 351 查看
不用线程:
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(2000,3000))

filter(function, iterable)

这个函数的功能是过滤出iterable中所有以元素自身作为参数调用function时返回True或bool(返回值)为True的元素并以列表返回.
def f(x):

    return x > 5

filter(f, range(10))

>>[6,7,8,9]
线程:
#coding:utf8
import threading
rs = [] #用来成放满足条件的数字,最后打印用
lock = threading.RLock()
class Isprime(threading.Thread):
def __init__(self,num):
threading.Thread.__init__(self) #不要忘记
self.num = num
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(2000,3000):
a=Isprime(i)
threads.append(a)
#启动线程
for x in threads:
x.start()
#阻塞线程直到结束
for s in threads:
x.join()
#打印结果
print rs
print len(rs)
if __name__=='__main__':
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: