所以我最近幾天一直在使用python的多處理庫,我真的很喜歡處理池。這很容易實現,我可以看到很多用途。我已經完成了我之前聽說過的幾個項目,以熟悉它,並且最近完成了一個蠻力強制hang子手遊戲的程序。python prime crunching:處理池速度較慢?
Anywho,我做的所有100萬至200單螺紋,並通過處理池之間萬元素數相加的執行時間compairison。現在,對於劊子手排排坐,投入處理池改善執行時間的遊戲了約8倍(i7處理器與8個核),但磨出來的這些素數的時候,它實際上由4
幾乎因素增加處理時間誰能告訴我這是爲什麼?這裏是有興趣的人看或測試它的代碼:
#!/user/bin/python.exe
import math
from multiprocessing import Pool
global primes
primes = []
def log(result):
global primes
if result:
primes.append(result[1])
def isPrime(n):
if n < 2:
return False
if n == 2:
return True, n
max = int(math.ceil(math.sqrt(n)))
i = 2
while i <= max:
if n % i == 0:
return False
i += 1
return True, n
def main():
global primes
#pool = Pool()
for i in range(1000000, 2000000):
#pool.apply_async(isPrime,(i,), callback = log)
temp = isPrime(i)
log(temp)
#pool.close()
#pool.join()
print sum(primes)
return
if __name__ == "__main__":
main()
它會目前在單個線程中運行,經過處理池運行,取消游泳池語句和註釋掉的其他行主循環。
實際上,將你的代碼加速到很多地獄的東西是刪除全局部分。如果你有本地變量,查找速度會快得多。 –
無法刪除全局變量而無需添加類,因爲我只能將一個變量傳遞給回調函數。 – Laharah
相關:[最快的方式列出蟒蛇中N以下的所有素數](http://stackoverflow.com/q/2068372/4279) – jfs