python3.4.3 多进程之间结果变量的传递问题,程序无任何结果输出

我的程序功能是查找100-9999999(这个数值任意修改,大于100即可)之间的水仙花数,通过多个进程共同计算输出结果,在IDLE中,子进程没有任何print结果出现,... 我的程序功能是查找100-9999999(这个数值任意修改,大于100即可)之间的水仙花数,通过多个进程共同计算输出结果,
在IDLE中,子进程没有任何print结果出现,要怎么做才能有结果输出?
这个是我的程序的源代码,可以修改之后发到我的企鹅邮箱,一三三九七零三零三九
链接: http://pan.baidu.com/s/1o6otREq 密码: chk1
顺带贴个源码截图:
展开
 我来答
liuweiathust
2015-09-09 · TA获得超过661个赞
知道小有建树答主
回答量:142
采纳率:100%
帮助的人:171万
展开全部

多进程间共享的变量要使用特殊的数据结构,在multiprocessing包里有提供,常用的有Queue, Value, Array等,这里比较适合用Queue

修改后的程序如下,注意Result赋值,和ProcessCheck的参数

另外,Result要排序后输出的话,要用循环从Queue取值构建list再排序,这里省略了

import datetime
import sys
import time
import multiprocessing
PartStart = []       #每个process计算的起点
PartEnd = []         #每个process计算的终点
Result =  multiprocessing.Queue()      #所有结果存储在Result数组中
ProcessCount = 10          #进程数 
EndNum = 9999999           #计算范围,默认100开始,终止数可以任意修改,大于100即可

print('Start:%s' %datetime.datetime.now().strftime("%Y/%d/%m %H:%M:%S"))
start=time.time()

d=int(((EndNum-99)/ProcessCount)+0.5)
for i in range(ProcessCount):
    PartStart.append(100+i*d)
    PartEnd.append(PartStart[i]+d-1)
PartEnd[ProcessCount-1]=EndNum
#==========================================
#这段代码只是计算每个process的计算起点和终点

def CheckNum(Number):
    tmp=str(Number)
    len_num=len(tmp)
    sum_num = 0
    for i in range(len_num):
        sum_num=sum_num+(int(tmp[i])**len_num)
    if sum_num==int(Number):
        return True
        #print(Number,"是水仙花数")
    else:
        return False
        #print(Number,"不是水仙花数")
def ProcessCheck(Start,End, Result):
    for j in range(int(Start),int(End)+1):      
        if CheckNum(j):
            #print(j,"是水仙花数")
            print("hello world")
            Result.put(str(j)+"是水仙花数")
#============================================
#这段代码用于计算某数值区间内的水仙花数,并存储进result数组中,也是每个process运行的代码

def main():
    threads=[]
    for i in range(ProcessCount):
        p=multiprocessing.Process(target=ProcessCheck, args=(PartStart[i],PartEnd[i], Result))
        threads.append(p)
    for i in range(ProcessCount):
        threads[i].start()
    for i in range(ProcessCount):
        threads[i].join()
    #Result.sort(key=lambda t:t[0])
    for i in range(Result.qsize()):
        print(Result.get())
    #将最后的结果排序输出,但没有任何结果出现
    end = time.time()
    input('End:%s' %datetime.datetime.now().strftime("%Y/%d/%m %H:%M:%S")+"\n"+"共耗时:"+str(end-start))
    #这个input没有任何意义,主要是防止程序直接结束退出
if __name__ == '__main__':
    main()
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式