[python] parsing souboru
Jakub Zíka
jakub.zika.21 na gmail.com
Středa Květen 5 16:16:00 CEST 2010
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 <devel na 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<devel na 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 na 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 na py.cz
>>> http://www.py.cz/mailman/listinfo/python
>>>
>> _______________________________________________
>> Python mailing list
>> Python na 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 na py.cz
> http://www.py.cz/mailman/listinfo/python
>
Další informace o konferenci Python