OK. Finally I have it :) It was only the amount of memory it was consumed each time. I tried it with a smaller but a significant number of records and finally I figured out that there is a limit and after that memory consumption is ok. I had only reach that count of browser request :-D
Sorry for your time and thanks for help. =-<>-= 2012. május 11., péntek 9:30:28 UTC+2 időpontban szimszon a következőt írta: > > The problem is not that if I call the controller function if consumes > memory. My problem is that there is something that still reference > something after the execution is finished so the consumed memory never get > released / reused... > > 2012. május 10., csütörtök 23:27:32 UTC+2 időpontban Martin.Mulone a > következőt írta: >> >> The problem is fetchall(), is getting all the records to memory. >> If you want to iterate a large dataset or not so heavy, but have a table >> with many fields, perhaps you can do it by blocks. >> >> For example using raw sql with dal: example: this fetch by 1000 records >> >> queryraw = "select * from mytable %(limit_query)s" >> def records(query): >> rows = db.executesql(query) >> if rows: >> return True >> else: >> return False >> >> rec = 0 >> stage = 0 >> block = 1000while True: >> offset = stage * block >> query = queryraw % {'limitquery': 'LIMIT %s, %s' % (offset, block)} >> if not records(query): >> break >> >> rows = db.executesql(query) >> for row in rows: >> rec += 1 >> # do something >> >> stage += 1 >> >> This is not fast but keep memory low. >> >> >> 2012/5/10 szimszon <szims...@gmail.com> >> >>> Could it be related? >>> https://groups.google.com/forum/#!topic/web2py/hmsupVHdDHo/discussion >>> (Memory >>> leak in standalone DAL (issue #731), can you please help test?) >>> >>> 2012. május 10., csütörtök 22:32:53 UTC+2 időpontban szimszon a >>> következőt írta: >>> >>>> Okay. It's clear. >>>> >>>> I'm only puzzled about why the memory didn't get freed or reused after >>>> execution is finished. And if I execute the controller function in 1-2min >>>> interval mem is still not reused. >>>> >>>> So I understand it can eat up the memory but why is all memory locked >>>> forever and didn't get reused - in my understanding (it's not much) in my >>>> case GC do not free mem at all in python level. So some reference is still >>>> intact after function is finished. >>>> >>>> >>>> 2012. május 10., csütörtök 21:53:06 UTC+2 időpontban Richard a >>>> következőt írta: >>>>> >>>>> Ok, you don't need it to works all the time. >>>>> >>>>> Did you get it to update your records? >>>>> >>>>> If not, and if as you said it is a one trip, you can just treat the >>>>> whole records batch by batch... >>>>> >>>>> Look here : http://web2py.com/books/**default/chapter/29/14#** >>>>> Populating-database-with-**dummy-data<http://web2py.com/books/default/chapter/29/14#Populating-database-with-dummy-data> >>>>> >>>>> for i in range(10): >>>>> >>>>> >>>>> populate(db.mytable,100) >>>>> >>>>> >>>>> db.commit() >>>>> >>>>> >>>>> In this example only 100 records are populated at a time between >>>>> db.commit()... So maybe you just have to wrap for loop that will >>>>> db.commit() a couples of time during your processing. >>>>> >>>>> Richard >>>>> >>>>> >>>>> On Thu, May 10, 2012 at 3:32 PM, szimszon <szims...@gmail.com> wrote: >>>>> >>>>>> I had to store files and a lot of properties for it. It was in csv. >>>>>> But after I processed it we figured out that not all value was correct >>>>>> in >>>>>> csv but it was a bit redundant. So I can correct it by go through all >>>>>> the >>>>>> records row by row. So that was a one time trip. >>>>>> >>>>>> I just realized after the process I had no memory left. So now I'm >>>>>> investigating what happened... >>>>>> >>>>>> 2012. május 10., csütörtök 21:00:05 UTC+2 időpontban Richard a >>>>>> következőt írta: >>>>>>> >>>>>>> Yes but in this case it is not for the entire reecords... >>>>>>> >>>>>>> Why would you return a full list of all the records? >>>>>>> >>>>>>> I don't understand what is the purpose of listar that you return in >>>>>>> the view under a html table, why do you need to return all the 100000+ >>>>>>> entries? >>>>>>> >>>>>>> Richard >>>>>>> >>>>>>> On Thu, May 10, 2012 at 2:56 PM, szimszon <szims...@gmail.com>wrote: >>>>>>> >>>>>>>> In book it is a recommended way to iterate over sql results: >>>>>>>> >>>>>>>> http://web2py.com/books/**defaul**t/chapter/29/6<http://web2py.com/books/default/chapter/29/6> >>>>>>>> >>>>>>>> You can do all the steps in one statement: >>>>>>>> >>>>>>>> 1. >>>>>>>> 2. >>>>>>>> 3. >>>>>>>> >>>>>>>> >>> for row in db(db.person.name=='Alex').sel****ect(): >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> print row.name >>>>>>>> >>>>>>>> >>>>>>>> Alex >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 2012. május 10., csütörtök 20:42:22 UTC+2 időpontban Bruce Wade a >>>>>>>> következőt írta: >>>>>>>> >>>>>>>>> Sorry, you really need to read more about how python works. If you >>>>>>>>> learn how for loops work and memory you will understand the problem. >>>>>>>>> >>>>>>>>> One solution do the query before the for loop then loop through >>>>>>>>> the objects. This may help at bit. Research xrange vs range >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, May 10, 2012 at 11:30 AM, szimszon <szims...@gmail.com>wrote: >>>>>>>>> >>>>>>>>>> Sorry I don't understand. What do you mean "achieve with join"? >>>>>>>>>> >>>>>>>>>> There is an empty for loop with db.executesql() without join. And >>>>>>>>>> it is eating up the memory. :( >>>>>>>>>> >>>>>>>>>> 2012. május 10., csütörtök 19:12:30 UTC+2 időpontban Richard a >>>>>>>>>> következőt írta: >>>>>>>>>> >>>>>>>>>>> You can't manage what you want to achieve with join? >>>>>>>>>>> >>>>>>>>>>> Richard >>>>>>>>>>> >>>>>>>>>>> On Thu, May 10, 2012 at 10:48 AM, szimszon >>>>>>>>>>> <szims...@gmail.com>wrote: >>>>>>>>>>> >>>>>>>>>>>> Sorry for my dumbness but if something is wrong with my code >>>>>>>>>>>> please point me the right line. I'm not so good in English if it >>>>>>>>>>>> comes to >>>>>>>>>>>> "object instance count" and so. Yeah I know I should go and do >>>>>>>>>>>> some >>>>>>>>>>>> milkmaid job :) but I'm curious. >>>>>>>>>>>> >>>>>>>>>>>> I'm just define some variable: >>>>>>>>>>>> >>>>>>>>>>>> lista = list() >>>>>>>>>>>> last_row = None >>>>>>>>>>>> next_page_number = 0 >>>>>>>>>>>> >>>>>>>>>>>> Go in a for loop that just assign the db query result >>>>>>>>>>>> one-by-one to row variable. >>>>>>>>>>>> >>>>>>>>>>>> After that I assign the TABLE() helper to a list variable. That >>>>>>>>>>>> is it. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> 2012. május 10., csütörtök 16:34:49 UTC+2 időpontban Bruce Wade >>>>>>>>>>>> a következőt írta: >>>>>>>>>>>> >>>>>>>>>>>>> Using direct sql query or DAL is going to cause the exact same >>>>>>>>>>>>> problem in this situation. >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, May 10, 2012 at 7:28 AM, szimszon >>>>>>>>>>>>> <szims...@gmail.com>wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> It's postgres:// in a >>>>>>>>>>>>>> Version 1.99.7 (2012-04-23 11:26:23) dev of web2py, and >>>>>>>>>>>>>> >>>>>>>>>>>>>> Python 2.7.3 (default, Apr 20 2012, 22:44:07) >>>>>>>>>>>>>> [GCC 4.6.3] on linux2 >>>>>>>>>>>>>> >>>>>>>>>>>>>> python-psycopg2 2.4.5-1 >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> 2012. május 10., csütörtök 15:40:36 UTC+2 időpontban >>>>>>>>>>>>>> rochacbruno a következőt írta: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Just for curiosity, what happens if you do it in pure sql? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> for row in db.executesql("**sele**********ct * from >>>>>>>>>>>>>>> file_properties where id > 0"): >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> # do something >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Does it have a lower memory usage? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Thu, May 10, 2012 at 4:14 AM, Bruce Wade >>>>>>>>>>>>>>> <<bruce.w...@gmail.com> >>>>>>>>>>>>>>> > wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> for row in db( db.file_**propert**********ies.id > 0 ). >>>>>>>>>>>>>>>> select( >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Bruno Rocha >>>>>>>>>>>>>>> [http://rochacbruno.com.br] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> -- >>>>>>>>>>>>> Regards, >>>>>>>>>>>>> Bruce Wade >>>>>>>>>>>>> http://ca.linkedin.com/in/**bruc********elwade<http://ca.linkedin.com/in/brucelwade> >>>>>>>>>>>>> http://www.wadecybertech.com >>>>>>>>>>>>> http://www.fittraineronline.**co********m<http://www.fittraineronline.com>- >>>>>>>>>>>>> Fitness Personal Trainers Online >>>>>>>>>>>>> http://www.warplydesigned.com >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- >>>>>>>>> Regards, >>>>>>>>> Bruce Wade >>>>>>>>> http://ca.linkedin.com/in/**bruc****elwade<http://ca.linkedin.com/in/brucelwade> >>>>>>>>> http://www.wadecybertech.com >>>>>>>>> http://www.fittraineronline.**co****m<http://www.fittraineronline.com>- >>>>>>>>> Fitness Personal Trainers Online >>>>>>>>> http://www.warplydesigned.com >>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >> >> >> -- >> http://www.tecnodoc.com.ar >> >>