Note that there are some explanatory texts on larger screens.

plurals
  1. POcelery + eventlet = 100% CPU usage
    primarykey
    data
    text
    <p>We are using celery to get flights data from different travel agencies, every request takes ~20-30 seconds(most agencies require request sequence - authorize, send request, poll for results). </p> <p>Normal celery task looks like this: </p> <pre><code>from eventlet.green import urllib2, time def get_results(attr, **kwargs): search, provider, minprice = attr data = XXX # prepared data host = urljoin(MAIN_URL, "RPCService/Flights_SearchStart") req = urllib2.Request(host, data, {'Content-Type': 'text/xml'}) try: response_stream = urllib2.urlopen(req) except urllib2.URLError as e: return [search, None] response = response_stream.read() rsp_host = urljoin(MAIN_URL, "RPCService/FlightSearchResults_Get") rsp_req = urllib2.Request(rsp_host, response, {'Content-Type': 'text/xml'}) ready = False sleeptime = 1 rsp_response = '' while not ready: time.sleep(sleeptime) try: rsp_response_stream = urllib2.urlopen(rsp_req) except urllib2.URLError as e: log.error('go2see: results fetch failed for %s IOError %s'% (search.id, str(e))) else: rsp_response = rsp_response_stream.read() try: rsp = parseString(rsp_response) except ExpatError as e: return [search, None] else: ready = rsp.getElementsByTagName('SearchResultEx') [0].getElementsByTagName('IsReady')[0].firstChild.data ready = (ready == 'true') sleeptime += 1 if sleeptime &gt; 10: return [search, None] hash = "%032x" % random.getrandbits(128) open(RESULT_TMP_FOLDER+hash, 'w+').write(rsp_response) # call to parser parse_agent_results.apply_async(queue='parsers', args=[__name__, search, provider, hash]) </code></pre> <p>This tasks are run in eventlet pool with concurency 300, <code>prefetch_multiplier = 1</code>, <code>broker_limit = 300</code> When ~100-200 task are fetched from queue - CPU usage raises up to 100% ( whole CPU core is used) and task fetching from queue is performed with delays. </p> <p>Could you please point on possible issues - blocking operations( eventlet <code>ALARM DETECTOR</code> gives no exceptions ), wrong architecture or whatever.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload