Найти - Пользователи
Полная версия: Ошибка 10054
Начало » Python для новичков » Ошибка 10054
1 2 3
new_optimist
Вот часть проблемного кода:
f={}
g={}
raw=V[::]
t = 0
def DFSR(s):
 global D,t,raw,f
 raw.remove(s)
 for u in D[s]:
    if(u in raw):
       DFSR(u)
 t=t+1
 f[s]  = t
 g[t] = s
 print 't = ',t, ', len(raw) = ' ,len(raw), ', len(f) = ',len(f)
При малых размерах списка V все работает правильно, но при больших - программа просто вылетает (pypy-2.5 under python 2.7) без выдачи кода ошибки. Пытался запускать дебагер PyScripter, который выдал такое:
File “<string>”, line 73, in execInThread

File “C:\…\rpyc.zip\rpyc\core\stream.py”, line 166, in read
EOFError:
Но ведь ошибка 10054 - это что-то из работы с сокетами, а у меня никакие инет-соединения не используютя. В чем может быть причина?
П.С. Больно не пинайте, я только недавно начал изучать питон
terabayt
скорее всего переполнение стека
напишите условие и мы вместе попытаемся сделать без рекурсии
и пример списка V и D
new_optimist
terabayt
скорее всего переполнение стека
напишите условие и мы вместе попытаемся сделать без рекурсии
и пример списка V и D
Переполнение стека уже было и я, кажется, смог его устранить командой sys.setrecursionlimit(1000000000)
Ну на всякий случай: вот полный код:
http://double.vv.si/8.c.py
Здесь варианты входных файлов небольших размеров: http://double.vv.si/mini.rar (с ними все работает хорошо).
А это те большие входные файлы, для которых программа вылетает:
http://double.vv.si/08p2.txt
http://double.vv.si/08d2.txt
http://double.vv.si/08v2.txt
По сути это та часть поиска компонент сильной связности, где нужно каждой вершине V_i приписать значение f_i, приписывемое ей при обходе графа.
terabayt
да, файлы не маленькие
попробуйте
sys.setrecursionlimit(2**31-1)
а на каком значении t программа вылетает?
FishHook
new_optimist
sys.setrecursionlimit(1000000000)
прикольно, так у тебя поди памяти не хватает
new_optimist
terabayt
да, файлы не маленькие
попробуйте
sys.setrecursionlimit(2**31-1)
а на каком значении t программа вылетает?
Попробовал, но ничего не изменилось.
Программа вылетает на t=2552 в pypy-2.5 (вообще без объяснений и кодов ошибок), но если запускаю в дебагере (PyScripter), то дотягивает медленно до t = 10575 и выдает ошибку Errno 10054 в файле C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\stream.py", line 166, in read
new_optimist
FishHook
прикольно, так у тебя поди памяти не хватает
Да вроде всего хватает. Когда не хватало памяти, то программа так и “говорила”
RuntimeError: maximum recursion depth exceeded
Именно после этого и было добавлено sys.setrecursionlimit(1000000000)
py.user.next
new_optimist
Когда не хватало памяти, то программа так и “говорила”
Это не о памяти сообщение, а о глубине рекурсии. По умолчанию она ограничена небольшим значением, потому что в питоне она медленная и её следует избегать.
FishHook
new_optimist
Когда не хватало памяти, то программа так и “говорила”
RuntimeError: maximum recursion depth exceede
Ничего подобного. Программа говорила, что достигнуто ограничение на допустимую глубину рекурсии.
Ничего про занятую память тут не говорится. А вот когда ты это ограничение снял, тут вполне вероятна ситуация, когда рекурсия выжрала всю память, никто её не ограничивает более от этого гнусного поступка.
Это как лифт: если в него нагрузить более допустимого веса, он не поедет, скажет “maximum weight exceed”, но мы самы умные, мы у него мозги подкрутили и сделали ограничение веса не 1000 кг, а sys.set_weight_limit(1000000000), тросы оборвались, лифт упал. И кто виноват?
new_optimist
FishHook
И кто виноват?
Меня больше интересует не то, кто виноват, а что делать (как добавить питону памяти)?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB