Abstract away from the concrete pickle implementation.

Choose cPickle, if available, for best performance.
This commit is contained in:
Vincent Driessen 2012-02-13 13:20:09 +01:00
parent c4553f2a22
commit 9318825429
4 changed files with 13 additions and 4 deletions

View File

@ -1,6 +1,6 @@
import times
from uuid import uuid4
from pickle import loads, dumps
from .pickle import loads, dumps, UnpicklingError
from .proxy import conn
from .exceptions import UnpickleError, NoSuchJobError
@ -15,7 +15,7 @@ def unpickle(pickled_string):
"""
try:
obj = loads(pickled_string)
except StandardError:
except (StandardError, UnpicklingError):
raise UnpickleError('Could not unpickle.', pickled_string)
return obj

9
rq/pickle.py Normal file
View File

@ -0,0 +1,9 @@
from __future__ import absolute_import
try:
import cPickle as pickle
except ImportError:
import pickle # noqa
loads = pickle.loads
dumps = pickle.dumps
UnpicklingError = pickle.UnpicklingError

View File

@ -8,7 +8,7 @@ import procname
import socket
import signal
import traceback
from pickle import dumps
from .pickle import dumps
try:
from logbook import Logger
Logger = Logger # Does nothing except it shuts up pyflakes annoying error

View File

@ -2,7 +2,7 @@ import times
from datetime import datetime
from tests import RQTestCase
from tests.helpers import strip_milliseconds
from pickle import loads
from rq.pickle import loads
from rq.job import Job
from rq.exceptions import NoSuchJobError, UnpickleError