簡體   English   中英

完成后,Python程序不會退出

[英]Python program doesn't quit when finished

我有以下腳本186.py:

S=[]
study=set([524287])

tmax=10**7
D={}
DF={}
dudcount=0
callcount=0

def matchval(t1,t2):
    if t1==t2:
        global dudcount
        dudcount+=1
    else:
        global callcount
        callcount+=1
        D.setdefault(t1,set([]))
        D.setdefault(t2,set([]))
        D[t1].add(t2)
        if t1 in D[t2]:
            DF.setdefault(t1,set([]))
            DF[t1].add(t2)
            DF.setdefault(t2,set([]))
            DF[t2].add(t1)

for k in xrange(27):
    t1=(100003 - 200003*(2*k+1) + 300007*(2*k+1)**3)%(1000000)
    S.append(t1)
    t2=(100003 - 200003*(2*k+2) + 300007*(2*k+2)**3)%(1000000)
    S.append(t2)
    matchval(t1,t2)

t1=(100003 - 200003*(55) + 300007*(55)**3)%(1000000)
S.append(t1)
t2=(S[31]+S.pop(0))%(1000000)
S.append(t2)
matchval(t1,t2)

for k in xrange(29,tmax+1):
    t1=(S[31]+S.pop(0))%(1000000)
    S.append(t1)

    t2=(S[31]+S.pop(0))%(1000000)
    S.append(t2)
    matchval(t1,t2)

D.setdefault(524287,set([]))
DF.setdefault(524287,set([]))
print D[524287]
print DF[524287]
print dudcount,callcount
print "Done"

最后一行打印“完成”,但發生這種情況時python不會退出。 我輸入以下命令:

$ time python 186.py

得到結果:

set([810528L, 582178L, 49419L, 214483L, 974071L, 651738L, 199163L, 193791L])
set([])
11 9999989
Done

但我必須按ctrl + C來獲取時間:

real    34m18.642s
user    2m26.465s
sys     0m11.645s

在程序輸出“Done”之后,python的CPU使用率非常低......但是內存使用量繼續增長...一旦達到80%的系統內存(它是一個舊系統),我使用了ctrl + C.

這里發生了什么? 打印完成后程序正在做什么? 不應該這樣做嗎?

謝謝,丹

我在配備2GB RAM的2 GHz雙核筆記本電腦上運行相同的代碼,在Cygwin中花了大約1 1/2分鍾。 在程序退出之前,內存使用量增加了600 MB以上,在Done出現提示出現並釋放內存后花了大約2-4秒。 然而,在Done出現后我沒有看到任何內存增加。

我的猜測是它與內存管理有關。 Done之后,Python正在努力釋放所有內存,這可能需要一段時間才能在RAM較少的舊機器上運行。 我不確定為什么內存實際上會增加,除非有任何告訴你正在使用多少內存的延遲。

沒有跡象表明您發布的內容符合所描述的症狀。 也許執行代碼中的縮進是填充的,你真的要圍繞整個堆運行另一個循環。 請注意,只有勇敢的人才會在需要34分鍾的時間內嘗試重現您的問題。 你能在更短的時間內重現這個問題嗎?

當你做Control-C時,追溯說了什么?

無論如何,我強烈建議不要在整個地方都使用硬編碼常量(?),例如524287 ....給它一個有意義的名字並在開始時做meaningful_name = 524287名稱meaningful_name = 524287 或者,如果它確實是一個變量,請通過sys.argv.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM