CutyCapt выдает ошибку десериализации в сельдерее
У меня есть простая функция в tasks.py
который делает скриншот веб-страницы, используя CutyCapt и xvfb-run. Снимок экрана принимается как команда, переданная через OS
библиотека питонов. У меня также есть другой скрипт под названием call.py
который вызывает функцию.
Эта функция прекрасно работает, когда я запускаю ее как обычную функцию из call.py
(он посещает веб-страницу, делает снимок экрана и сохраняет его в локальной папке), но когда я добавляю .delay
и он запускает его в сельдерее, я получаю следующую ошибку:
[2016-12-21 13:17:52,649: INFO/MainProcess] Connected to amqp://*******************************
[2016-12-21 13:17:52,851: INFO/MainProcess] mingle: searching for neighbors
[2016-12-21 13:17:54,665: INFO/MainProcess] mingle: all alone
[2016-12-21 13:17:55,469: INFO/MainProcess] celery@myubuntucomputer ready.
[2016-12-21 13:18:01,470: CRITICAL/MainProcess] Can't decode message body: ContentDisallowed(u'Refusing to deserialize untrusted content of type pickle (application/x-python-serialize)',) [type:'application/x-python-serialize' encoding:'binary' headers:{}]
body: '\x80\x02}q\x01(U\x07expiresq\x02NU\x03utcq\x03\x88U\x04argsq\x04U http://www.reddit.com/q\x05\x85q\x06U\x05chordq\x07NU\tcallbacksq\x08NU\x08errbacksq\tNU\x07tasksetq\nNU\x02idq\x0bU$518f96eb-e132-4261-984b-255fcb5b2252q\x0cU\x07retriesq\rK\x00U\x04taskq\x0eU\x15tasks.take_screenshotq\x0fU\ttimelimitq\x10NN\x86U\x03etaq\x11NU\x06kwargsq\x12}q\x13U\nserializerq\x14U\x06pickleq\x15su.' (278b)
Traceback (most recent call last):
File "/usr/local/Desktop/celery/venv/local/lib/python2.7/site-packages/celery/worker/consumer/consumer.py", line 551, in on_task_received
payload = message.decode()
File "/usr/local/Desktop/celery/venv/local/lib/python2.7/site-packages/kombu/message.py", line 192, in decode
self._decoded_cache = self._decode()
File "/usr/local/Desktop/celery/venv/local/lib/python2.7/site-packages/kombu/message.py", line 197, in _decode
self.content_encoding, accept=self.accept)
File "/usr/local/Desktop/celery/venv/local/lib/python2.7/site-packages/kombu/serialization.py", line 253, in loads
raise self._for_untrusted_content(content_type, 'untrusted')
ContentDisallowed: Refusing to deserialize untrusted content of type pickle (application/x-python-serialize)
Я не звоню / не устанавливаю какие-либо предпочтения десериализации в моем коде.
Когда я запускаю функцию самостоятельно, типичный вывод, который я получаю (если он работает), выглядит следующим образом:
QFont::setPixelSize: Pixel size <= 0 (0)
QFont::setPixelSize: Pixel size <= 0 (0)
QFont::setPixelSize: Pixel size <= 0 (0)
QFont::setPixelSize: Pixel size <= 0 (0)
Мне интересно, если этот вывод является проблемой... Я пытался скрыть любой вывод ошибки из команды снимка экрана, но cutycapt по-прежнему выдает ту же ошибку десериализации. Другие функции в tasks.py
не бросайте ту же ошибку. Есть идеи?
1 ответ
Эта ошибка была вызвана открытием файла задач сельдерея tasks.py
в виртуальности, но работает мастером call.py
за пределами virtualenv, где сельдерей не был установлен правильно.