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

不用线程:
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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值