Python多进程-求素数个数
num.py
import math
from multiprocessing import cpu_count
from multiprocessing import Pool
# 判断数字是否为质数
#********** Begin *********#
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
#********** End *********#
# 计算给定区间含有多少个质数
#********** Begin *********#
def howMany(T):
sum = 0;
for i in range(T[0], T[1] + 1):
if isPrime(i):
sum += 1
return sum
#********** End *********#
# 对整个数字空间N进行分段CPU_COUNT
#********** Begin *********#
def separateNum(N, CPU_COUNT):
list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
list[0][0] = 1
if list[CPU_COUNT - 1][1] < N:
list[CPU_COUNT - 1][1] = N
return list
#********** End *********#
if __name__ == '__main__':
N = int(input())
# 多进程
CPU_COUNT = cpu_count() ##CPU内核数 本机为8
pool = Pool(CPU_COUNT)
sepList = separateNum(N, CPU_COUNT)
result = []
for i in range(CPU_COUNT):
result.append(pool.apply_async(howMany, (sepList[i], )))
pool.close()
pool.join()
ans = 0
list = [res.get() for res in result]
print(sum(list), end = '')
Python多线程-求合数个数
num2.py
import threading
import math
ans = 0
lock = threading.Lock()
# 判断数字是否为质数
#********** Begin *********#
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
#********** End *********#
#********** Begin *********#
# 计算给定区间含有多少个质数
def howMany(T):
sum = 0;
for i in range(T[0], T[1] + 1):
if isPrime(i):
sum += 1
lock.acquire()
try:
global ans
ans += sum
finally:
lock.release()
#********** End *********#
#********** Begin *********#
# 对整个数字空间N进行分段CPU_COUNT
def seprateNum(N, CPU_COUNT):
list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
list[0][0] = 1
if list[CPU_COUNT - 1][1] < N:
list[CPU_COUNT - 1][1] = N
return list
#********** End *********#
if __name__ == '__main__':
N = int(input())
threadNum = 32
t = []
sepList = seprateNum(N, threadNum)
for i in range(0, threadNum):
t.append(threading.Thread(target = howMany, args = (sepList[i], )))
t[i].start()
for i in range(0, threadNum):
t[i].join()
print(N - 1 - ans, end = '')
Python-ThreadLocal变量
threadlocal.py
import threading
x = 10
data = threading.local()
def action():
global x
data.num = x
for i in range(1000000):
data.num += 1
data.num -= 1
x = data.num
x = int(input())
thread = []
for i in range(10):
thread.append(threading.Thread(target = action))
thread[i].start()
for i in range(10):
thread[i].join()
print(x, end = '')
Python-进程 VS 线程
num4.py
import math
from multiprocessing import cpu_count
from multiprocessing import Pool
# 判断数字是否为质数
N = int(input())
a = list(map(int, input().split()))
def howMany(T):
ans = 0;
for i in range(T[0] - 1, T[1]):
ans = max(ans, a[i])
return ans
# 对整个数字空间N进行分段CPU_COUNT
def seprateNum(N, CPU_COUNT):
list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
list[0][0] = 1
if list[CPU_COUNT - 1][1] < N:
list[CPU_COUNT - 1][1] = N
return list
if __name__ == '__main__':
# 多进程
#********** Begin *********#
CPU_COUNT = cpu_count() ##CPU内核数 本机为8
pool = Pool(CPU_COUNT)
sepList = seprateNum(N, CPU_COUNT)
result = []
for i in range(CPU_COUNT):
result.append(pool.apply_async(howMany, (sepList[i], )))
pool.close()
pool.join()
ans = 0
list = [res.get() for res in result]
print(max(list), end = '')
#********** End *********#
Python-分布式进程
第1题答案:B