我是多处理新手 我已经为两个“强烈推荐”的多处理示例运行了示例代码,以响应其他stackoverflow多处理问题。 这是一个例子(我不敢再跑了!) test2.py (从pydev运行) 当我运行这个时,我的计算机很快就会慢下来。 它逐渐变慢。 过了一段时间,我设法进 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
这可能是一个非常愚蠢的问题.. 我在 python 中愚弄了一些人,并决定制作两个版本的素数应用程序,一个从一开始就无限地计算所有素数,直到你炒你的电脑,一个让用户输入一个数字,然后检查该数字是否为质数。
所以我做了一个工作正常但速度很慢的。 花了 41 秒来检查 269996535 是否是素数。 我想我的算法很糟糕..但这不是我关心的问题,然后我阅读了多处理(多线程)并决定给它一个 go,经过几分钟的修补,我让它在较小的数字上工作,而且速度很快,所以我决定与我之前的大数字(269996535)进行比较,然后我看着我的 resmon 并且 cpu 飙升,然后音乐停止了。 我所有的程序都开始一一崩溃,最后蓝屏。 有人可以解释为什么会发生这种情况以及为什么我不能让它工作。 我不是在寻找更好的算法,我只是想弄清楚为什么我的电脑在尝试多线程时崩溃了。
有效的代码
import time
def prime(x):
start = time.time()
num = x+1
range_num = []
two = x/2
five = x/5
ten = x/10
if not two.is_integer() or five.is_integer() or ten.is_integer():
for i in range(1, num):
y = x/i
if y.is_integer():
range_num.append(True)
else:
range_num.append(False)
total = 0
for ele in range(0, len(range_num)):
total = total + range_num[ele]
if num == 1:
print(1, " is a prime number")
elif total == 2:
print(num-1, " is a prime number")
else:
print(num-1, " is not a prime number")
else:
print(num - 1, " is not a prime number")
print("This took ", round((time.time() - start), 2), "Seconds to complete")
prime(269996535)
炸了我的电脑的代码
import time
import multiprocessing
global range_num
range_num = []
def part_one(x, denom):
if not denom == 0:
for i in range(1, x):
y = x/denom
if y.is_integer():
range_num.append(True)
else:
range_num.append(False)
if __name__ == '__main__':
start = time.time()
x = int(input("Enter number: "))
num = x+1
range_num = []
if num-1 == 1:
print("1 is a prime number")
for i in range(0, x):
p = multiprocessing.Process(target=part_one, args=(x, i,))
p.start()
for process in range_num:
process.join()
total = 0
for ele in range(0, len(range_num)):
total = total + range_num[ele]
if total == 2:
print(num-1, " is a prime number")
else:
print(num - 1, " is not a prime number")
...我的程序开始一一崩溃,然后最终蓝屏。 有人可以解释为什么会这样吗...?
您的 PC 散热不足。 CMOS 逻辑越难工作,产生的热量就越多。 让它冷却后,它很可能会好转。
你的电脑不是唯一过热的电脑。 在我的整个职业生涯中,我不得不时常处理过热的 PC。 长时间的计算会关闭我现在用于工作的笔记本电脑,除非我将它设置在块上,并且我在我的桌子上设置了一个小风扇,以便在其上下吹气。
如果它在桌面机箱或塔式机箱中,您可以尝试取下盖子并将风扇指向它。 如果它是机架式服务器,那么您运行它的房间没有足够的冷却,或者您应该要求退款。
PS,如果您需要将裸露的内置硬盘驱动器连接到 PC,那么小型台式风扇是必不可少的。 它们不能在没有强制气流的情况下工作。
这是一个概念验证:
def has_divisors_in_range(number: int, the_range):
for divisor_candidate in the_range:
# If `divisor_candidate` divides `number` evenly,
# then `number` is not prime
if number % divisor_candidate == 0:
return divisor_candidate
return -1
nprocs = 4
processes = [
multiprocessing.Process(
target= has_divisors_in_range,
args=(num, range(t + 1, num + 1, nprocs))
)
for t in range(1, nprocs + 1)
]
# Wait for the processes somehow...
然后你可以收集所有这些过程的结果,如果它们都是-1
,那么这个数字是素数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.