Jak jsem už psal, dá se použít modul resource: >>> import resource >>> resource.setrlimit(resource.RLIMIT_AS, (20000000, 20000000)) >>> a = [] >>> while True: a.append(1000) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> MemoryError >>>
btw. Váš příklad mi nefungoval, asi tam bylo moc nul. Prej to nejde zkonvertovat na integer. Nebo máte 64-bit procesor? 2010/5/5 Jan Janech <de...@atlas.sk>: > Ak myslite, ze je to take jednoduche, skuste si spustit, > > list(xrange(10000000000000)) > > neviem kolko nul tam moze byt, aby to zobralo. Toto som skusil ked som pisal > predchadzajuci mail. Potom som ho musel pisat znovu, lebo mi linux zabil > thunderbird pre nedostatok pamate. > > Viem, ze ak sa to spravi spravne, nemozem v eval a exec pouzivat ziadne fcie > (ani list, ani xrange), takze hentak uplne to napisat nepojde. Ale verim, ze > niekde na svete existuje vacsi borec ako ja ( :-D ) a ten to dokaze takyto > problem vytvorit aj so standardnymi prvkami jazyka. > > Jan Janech > > On 05/05/10 15:27, Jakub Zíka wrote: >> >> Na Linuxu bych se proti přetížení procesoru bránil tak, že bych >> spustil skript jako samostatný proces (např. modul multiprocessing >> nebo subprocess) a pak bych mu posílal signály SIGSTOP a SIGCONT přes >> funkci os.kill(pid, sig). Kdyby mi připadalo, že už běží nějak moc >> dlouho, prostě bych ho vypnul přes signál TERM, pokud by nereagoval >> (myslím, že se to může stát, když počítá např. 100000**10000000), tak >> signál KILL. Protože by uživatel nemohl změnit chování při přijetí >> signálů (protože by nemohl importovat potřebný modul), mělo by to >> fungovat celkem spolehlivě. Maximální velikost použité paměti lze >> omezit přes modul resource. >> >> 2010/5/5 Jan Janech<de...@atlas.sk>: >>> >>> Potesim Vas, z evalu ani z execu sa pokial mi je znamo utiect neda. Teda >>> ak >>> to clovek vie spravit. >>> >>> staci nieco taketo: >>> >>>>>> eval(superNebezpecnyKod, {'__builtins__': {}}, {}) >>> >>> alebo >>> >>>>>> exec superNebezpecnyKod in {'__builtins__': {}}, {} >>> >>> zavisi ale od toho, akym situaciam sa chcete vyhnut. >>> >>> coho sa nezbavite (ani evalom) je napr nekonecna rekurzia: >>> >>>>>> superNebezpecnyKod='(lambda x=(lambda y: y(y)): x(x))()' >>> >>> to az tak neboli, ak nemate povolenu nejaku prilis hlboku uroven >>> rekurzie. >>> >>> co tak ale nekonecny cyklus? >>> >>>>>> superNebezpecnyKod='(lambda x=[1]: [x.append(1) for i in x])()' >>> >>> alebo supernarocne operacie? >>> >>>>>> superNebezpecnyKod='2**10000000000000000' >>> >>> vela stastia pri vyuzivani evalu a execu :D >>> >>> Jan Janech >>> >>> >>> On 05/05/10 14:26, Hynek Fabian wrote: >>>> >>>> Jan Janech (středa 05 Květen 2010 13:08:49): >>>>> >>>>> Dovolim si oponovat. Vsetko co sa da v pythone v exec spravit pre >>>>> narusenie bezpecnosti sa da spravit aj v eval. >>>> >>>> Jak? >>>> >>>> eval(x, {}, {}) >>>> >>>> Jakým X se dá z takové konstrukce utéci? >>>> _______________________________________________ >>>> Python mailing list >>>> Python@py.cz >>>> http://www.py.cz/mailman/listinfo/python >>>> >>>> >>>> >>> >>> >>> -- >>> >>> ____________________________ >>> Ing. Jan Janech >>> Katedra softverovych technologii >>> Fakulta riadenia a informatiky >>> Zilinska Univerzita >>> _______________________________________________ >>> Python mailing list >>> Python@py.cz >>> http://www.py.cz/mailman/listinfo/python >>> >> _______________________________________________ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python >> >> >> > > > -- > > ____________________________ > Ing. Jan Janech > Katedra softverovych technologii > Fakulta riadenia a informatiky > Zilinska Univerzita > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python