I'm getting the error below, the error only happens when I add delay
to process_upload
function, otherwise it works without a problem.
Could someone explain what this error is, why its happening and any recommendations to resolve?
Error:
PicklingError at /contacts/upload/configurator/47/Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
This is the view
if request.method == 'POST':form = ConfiguratorForm(data=request.POST)# Send import to task.process_upload.delay(upload_id=upload.id, form=form)
This is the task
@task
def process_upload(upload_id, form):upload = Upload.objects.get(id=upload_id)upload.process(form=form)
Upload.process is within my model:
def process(self, form):self.date_start_processing = timezone.now()import_this(data=self.filepath, extra_fields=[{'value': self.group_id, 'position': 5},{'value': self.uploaded_by.id, 'position': 6}], form=form)
Full trace:
Traceback:
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response115. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view25. return view_func(request, *args, **kwargs)
File "/Users/user/Documents/workspace/sms/contacts/views.py" in upload_configurator118. process_upload.delay(upload_id=upload.id, form=form)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/celery/app/task.py" in delay357. return self.apply_async(args, kwargs)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/celery/app/task.py" in apply_async472. **options)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/celery/app/amqp.py" in publish_task249. **kwargs
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/messaging.py" in publish157. compression, headers)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/messaging.py" in _prepare233. body) = encode(body, serializer=serializer)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/serialization.py" in encode161. payload = encoder(data)
File "/Users/user/Documents/workspace/sms/django-env/lib/python2.7/site-packages/kombu/serialization.py" in dumps340. return dumper(obj, protocol=pickle_protocol)Exception Type: PicklingError at /contacts/upload/configurator/47/
Exception Value: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
forms.py
COL_CHOICES = [('N/A', 'No Import'),('first_name', 'First Name'),('last_name', 'Last Name'),('company', 'Company'),('mobile', 'Mobile Number'),('email', 'Email Address'),]class ConfiguratorForm(forms.Form):col1 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')col2 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')col3 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')col4 = forms.TypedChoiceField(choices=COL_CHOICES, initial='first_name')