python - Celery task in Flask for uploading and resizing images and storing it to Amazon S3 -


i'm trying create celery task uploading , resizing image before storing amazon s3. doesn't work expected. without task working fine. code far:

stacktrace

traceback (most recent call last):   file "../myve/lib/python2.7/site-packages/kombu/messaging.py", line 579, in _receive_callback     decoded = none if on_m else message.decode()   file "../myve/lib/python2.7/site-packages/kombu/transport/base.py", line 147, in decode     self.content_encoding, accept=self.accept)   file "../myve/lib/python2.7/site-packages/kombu/serialization.py", line 187, in decode     return decode(data)   file "../myve/lib/python2.7/site-packages/kombu/serialization.py", line 74, in pickle_loads     return load(bytesio(s))   file "../myve/lib/python2.7/site-packages/werkzeug/datastructures.py", line 2595, in __getattr__     return getattr(self.stream, name)   file "../myve/lib/python2.7/site-packages/werkzeug/datastructures.py", line 2595, in __getattr__     return getattr(self.stream, name)     ... runtimeerror: maximum recursion depth exceeded while calling python object 

views.py

from pil import image  flask import blueprint, redirect, render_template, request, url_for  myapplication.forms import uploadform myapplication.tasks import upload_task   main = blueprint('main', __name__)  @main.route('/upload', methods=['get', 'post']) def upload():     form = uploadform()     if form.validate_on_submit():         upload_task.delay(form.title.data, form.description.data,                           image.open(request.files['image']))         return redirect(url_for('main.index'))     return render_template('upload.html', form=form) 

tasks.py

from stringio import stringio  flask import current_app  myapplication.extensions import celery, db myapplication.helpers import resize, s3_upload myapplication.models import myobject   @celery.task(name='tasks.upload_task') def upload_task(title, description, source):     stream = stringio()     target = resize(source, current_app.config['size'])     target.save(stream, 'jpeg', quality=95)     stream.seek(0)     obj = myobject(title=title, description=description, url=s3_upload(stream))     db.session.add(obj)     db.session.commit() 

thank you

it looks attempting pass entire uploaded file part of celery message. imagine causing trouble. recommend seeing if can save file web server part of view, have message (the "delay" argument) contain filename rather entire file's data. task can read file in hard drive, upload s3, delete locally.


Comments

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

c++ - Correct method for redrawing a layered window -

java.util.scanner - How to read and add only numbers to array from a text file -