Я играю с воркерами с разными версиями Python. Одна из ловушек - используемая версия протокола pickle. Для python3.4 rq использует самую высокую доступную версию протокола (4), но python2.7 понимает только до 2. Это можно исправить, используя настраиваемый класс Job и заставляя python3.4 использовать протокол версии 2, но это довольно неудобно.
Мне удалось использовать настраиваемый класс Job (перезаписывающий метод дампа), чтобы решить эту проблему, но использование его в качестве флага могло бы быть более удобным.
: +1:
Возникла проблема с реализацией настраиваемого сериализатора args/kwargs
. Я думаю, что это лучший подход для этой конкретной проблемы :)
Вот ссылка на упомянутую мной проблему: https://github.com/nvie/rq/issues/369 . Я забыл прикрепить его, когда закрыл этот выпуск, извините.
В качестве побочного примечания, хотя это не особенно красиво, это, похоже, действительно работает:
import pickle
pickle.HIGHEST_PROTOCOL = 2
from rq import Queue
# from here on RQ will use pickle protocol 2
По крайней мере, при использовании python 3.4 для постановки задания в очередь и 2.7 для его чтения.
Самый полезный комментарий
В качестве побочного примечания, хотя это не особенно красиво, это, похоже, действительно работает:
По крайней мере, при использовании python 3.4 для постановки задания в очередь и 2.7 для его чтения.