想知道你能不能帮忙?我是 Python 新手,正在尝试编写一段简单的代码,用于并行计算素数(跨多个 CPU 内核)......我知道这很蹩脚,但它似乎是一段值得学习的合理代码Python线程等。
我已经成功地使用线程运行代码,但现在正在调查进程。
下面的代码运行良好,直到我收集结果。我尝试使用 eclipse 和 pdev 调试器进行调试,并发现我用来从 outputQueue 中删除项目的 While 循环似乎在 3 次迭代后仍然存在,因此代码实际上从未到达输出结果的阶段。
任何想法/建议/帮助将不胜感激。
非常感谢
克雷格 ------ 代码
from multiprocessing import Process, Queue
# return true if number is prime, else false
def calcPrime(number):
divisor=2
if number%2==0:
return False
numberIsPrime=True
while divisor*divisor <= number:
if number % divisor == 0:
numberIsPrime = False
break
divisor = divisor + 1
return numberIsPrime
# generate list of primes
def generatePrimes(minimum, maximum):
return [num for num in range(minimum,maximum) if calcPrime(num)==True]
def workerThread(output, mn, mx):
primelist=generatePrimes(mn,mx)
output.put(primelist)
def main():
outputQueue=Queue()
t=[]
t.append(Process(target=workerThread, args=(outputQueue, 1,25000)))
t.append(Process(target=workerThread, args=(outputQueue, 25001, 50000)))
t.append(Process(target=workerThread, args=(outputQueue, 50001, 75000)))
t.append(Process(target=workerThread, args=(outputQueue, 75001, 100000)))
#start all threads
for idx in range(len(t)):
t[idx].daemon=True
t[idx].start()
#wait for all process threads to complete
for p in t:
p.join()
print("Processes finished")
# gather all results
l=[]
while True:
try:
l+=outputQueue.get() # Code seems to stick here after about 3-4 iterations
except:
break
#print out our lovely primes
for idx in range(len(l)):
print (str(l[idx]))
# standard code
if __name__ == '__main__':
main()