<p>rq-py3.4 nicht kompatibel mit rq-py2.7 aufgrund der Pickle-Protokollversion</p>

Erstellt am 3. Nov. 2015  ·  4Kommentare  ·  Quelle: rq/rq

Ich spiele mit Arbeitern mit verschiedenen Python-Versionen herum. Eine der Fallstricke ist die verwendete Pickle-Protokollversion. Für Python3.4 verwendet rq die höchste verfügbare Protokollversion (4), aber Python2.7 versteht nur bis zu 2. Dies kann behoben werden, indem eine benutzerdefinierte Job-Klasse verwendet wird und Python3.4 gezwungen wird, die Protokollversion 2 zu verwenden, aber es ist ziemlich umständlich.
Ich habe es geschafft, eine benutzerdefinierte Job-Klasse zu verwenden (die Dumps-Methode überschrieben), um dieses Problem zu beheben, aber es könnte bequemer sein, dies als Flag bereitzustellen.

Hilfreichster Kommentar

Als Randnotiz, obwohl es nicht besonders hübsch ist, scheint dies tatsächlich zu funktionieren:

import pickle
pickle.HIGHEST_PROTOCOL = 2
from rq import Queue 
# from here on RQ will use pickle protocol 2

Zumindest wenn Python 3.4 verwendet wird, um den Job in die Warteschlange zu stellen, und 2.7, um ihn zu lesen.

Alle 4 Kommentare

:+1:

Es gibt ein Problem beim Implementieren eines anpassbaren args/kwargs Serializers. Ich denke, das ist der bessere Ansatz für dieses spezielle Problem :)

Hier ist ein Link zu dem von mir erwähnten Problem: https://github.com/nvie/rq/issues/369 . Ich habe vergessen, es anzuhängen, als ich dieses Problem geschlossen habe, sorry.

Als Randnotiz, obwohl es nicht besonders hübsch ist, scheint dies tatsächlich zu funktionieren:

import pickle
pickle.HIGHEST_PROTOCOL = 2
from rq import Queue 
# from here on RQ will use pickle protocol 2

Zumindest wenn Python 3.4 verwendet wird, um den Job in die Warteschlange zu stellen, und 2.7, um ihn zu lesen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen