【发布时间】:2014-05-20 03:05:43
【问题描述】:
我正在制作一个素数计算器,它运行良好,但我希望它通过使用多线程来更快。我想知道你们中是否有人可以指出我有一些资源的地方(python 文档不是很有帮助)或者在我的代码中给我一个例子。
import time
#Set variables
check2 = 0
check3 = 0
check5 = 0
check7 = 0
#get number
primenum = int(input("What number do you want to find out whether it is prime or not?\nIt must be a natural number\n**Calculations may take some time depending of the power of the computer and the size of the number**\n"))
#set divisor
primediv = primenum - 2
#assume it's prime until proven innocent
prime = 1
#Create variable for GUI
working = "Calculating"
work = 10000000
#set the number of divides to 0
divnum = 0
#start the clock
starttime = time.perf_counter()
#until it is not prime or divided by 1...
while prime == 1 and primediv >7:
#does simple checks to deal with large numbers quickly
#Does this by dividing with small numbers first
if primenum != 0 and check2 == 0:
primemod = primenum % 2
check2 = 1
print(working + ".")
working = working +"."
elif primenum != 0 and check3 == 0:
primemod = primenum % 3
check3 = 1
print(working + ".")
working = working +"."
elif primenum != 0 and check5 == 0:
primemod = primenum % 5
check5 = 1
print(working + ".")
working = working + "."
elif primenum != 0 and check7 == 0:
primemod = primenum % 7
check7 = 1
print(working + ".")
working = working + "."
#divde and get remainder
else:
primemod = primenum % primediv
#Working visuals
if divnum == work:
print(working + ".")
working = working +"."
work = work + 10000000
#if the can't be devided evenly
if primemod == 0:
#then it isn't a prime
prime = 0
else:
#if it can, keep going
primediv = primediv - 2
divnum = divnum + 1
#print results
if prime == 1:
print("That number is prime")
print ("It took ", time.perf_counter()-starttime, " seconds to perform that calculation\n")
else:
print("That number is not prime")
print ("It took ", time.perf_counter()-starttime, " seconds to perform that calculation\n")
【问题讨论】:
-
请注意,多线程(在 Python 中)不会让任何东西运行得更快。它不使用多个处理器线程,它只是在多个操作线程中运行。
-
还可以深入查看Sieve of Eratosthenes 以检查素数。它比你的蛮力方法快得多。
-
如果我们暂时忽略任何 python 细节,请注意多线程 != 更快。您可以从头开始将程序设计为多线程,并利用特定的硬件使程序运行得更快。但是仅仅让一个程序多线程并不能让它自动更快(在某些情况下它可能工作得更慢)。此外,它为大量程序引入了全新级别的复杂性,要么破坏它们,要么使它们更难理解和维护。
标签: python python-3.x