pyax team mailing list archive
-
pyax team
-
Mailing list archive
-
Message #00014
Re: [Bug 256141] Re: Python gzip lib says "MemoryError: Can't allocatememory for compression object"
Nope, rather small data set is being queried.
The problem is related to a "bug" in which gzip fails when it is used by a
large number of os threads - in my case it fails around 400 threads all
hitting pyax and then pyax hits gzip.
This is less a pyax bug than a Python bug but since pyax uses gzip this is a
pyax problem too.
I am guessing Stackless Python would not have this problem because I am
guessing gzip is hitting a C stack limit rather than a Python limit since I
have 1 GB RAM available when gzip complains about the lack of RAM.
This apparent bug does not have a fix other than to reduce the number of
threads being used however you might want to code a MemoryError trap to
notice when this condition happens and there are a bunch of threads being
used.
It took me a while to isolate the root cause however in the meantime I
reported the bug as it appeared to be related to pyax then later learned
this is a pyax second-hand bug via Python's gzip module.
--------------------------------------------------
From: "Kevin Shuk" <surf@xxxxxxxxxxxxx>
Sent: Friday, August 08, 2008 1:31 PM
To: <raychorn@xxxxxxxxxxx>
Subject: [Bug 256141] Re: Python gzip lib says "MemoryError: Can't
allocatememory for compression object"
> I'm making the assumption that you're query is resulting in a very large
> data set - many fields, some quite large and perhaps many records.
>
> Run the query, only instead of returning fields, return count() to see how
> many rows you're expecting back.
> How many fields are you requesting in your query and how big are they?
> Do you have a UNIX instance on which you can try this query in pyax? This
> may be exacerbated by differences in Windows' memory management.
>
> The most immediate thing you can try is to reduce the number of fields
> you're returning - exclude any that are not necessary (especially large
> text fields).
>
> Also, if the query wants to return more than 200 rows, we can try
> reducing the query batch size to the minimum of 200 rows at a time. This
> will require releasing some code that's checked in, but not yet on the
> release branch.
>
> ** Changed in: pyax
> Status: New => Triaged
>
> --
> Python gzip lib says "MemoryError: Can't allocate memory for compression
> object"
> https://bugs.launchpad.net/bugs/256141
> You received this bug notification because you are a direct subscriber
> of the bug.
>
> Status in Salesforce.com Apex API library for Python: Triaged
>
> Bug description:
> Traceback:
>
> File "Z:\python projects\@lib\lib\pyax\connection.py", line 614, in query
> query_result = self._callApex(self.svc.query, query_string)
>
> File "Z:\python projects\@lib\lib\pyax\connection.py", line 158, in
> _callApex
> apex_result = apex_method(*args, **kw)
>
> File "Z:\python projects\@lib\lib\pyax\beatbox.py", line 56, in query
> return QueryRequest(self.context, self.sessionId, soql).post()
>
> File "Z:\python projects\@lib\lib\pyax\beatbox.py", line 315, in post
> data=self.makeEnvelope(),
>
> File "Z:\python projects\@lib\lib\pyax\beatbox.py", line 273, in
> makeEnvelope
> ("s", _envNs), ("p", _partnerNs), ("o", _sobjectNs))
>
> File "Z:\python projects\@lib\lib\pyax\beatbox.py", line 243, in __init__
> XmlWriter.__init__(self, context.gzip_request)
>
> File "Z:\python projects\@lib\lib\pyax\beatbox.py", line 173, in __init__
> self.__gzip = gzip.GzipFile(mode='wb', fileobj=self.__buf)
>
> File "C:\Python25\lib\gzip.py", line 120, in __init__
> 0)
>
> MemoryError: Can't allocate memory for compression object
>
--
Python gzip lib says "MemoryError: Can't allocate memory for compression object"
https://bugs.launchpad.net/bugs/256141
You received this bug notification because you are a member of pyax
Developers, which is the registrant for pyax.
References