문제

나는 피클하고 싶은 쿠키 자르가있는 물건이 있습니다.

그러나 모두 알다시피, 피클은 잠금 물체를 포함하는 물체를 질식시킵니다. 그리고 끔찍한 이유로 쿠키 자르에는 잠금 물체가 있습니다.

from cPickle import dumps
from cookielib import CookieJar

class Person(object):
    def __init__(self, name):
        self.name = name
        self.cookies = CookieJar()

bob = Person("bob")
dumps(bob)

# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# cPickle.UnpickleableError: Cannot pickle <type 'thread.lock'> objects

이것을 어떻게 유지합니까?

내가 생각할 수있는 유일한 해결책은 filecookiejar.save 및 filecookiejar.load를 Stringio 객체에 사용하는 것입니다. 그러나 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

다음은 Pickle에서 사용하는 GetState/Setstate를 무시하는 Cookiejar에서 수업을 도출하여 시도합니다. 나는 cookiejar를 사용하지 않았으므로 사용할 수 있는지 모르지만 파생 클래스를 덤프 할 수 있습니다.

from cPickle import dumps
from cookielib import CookieJar
import threading

class MyCookieJar(CookieJar):
    def __getstate__(self):
        state = self.__dict__.copy()
        del state['_cookies_lock']
        return state

    def __setstate__(self, state):
        self.__dict__ = state
        self._cookies_lock = threading.RLock()

class Person(object):
    def __init__(self, name):
        self.name = name
        self.cookies = MyCookieJar()

bob = Person("bob")
print dumps(bob)

다른 팁

CookieJar 지속적으로 잘 설계되지 않았습니다 (이것이 바로 FileCookieJar 서브 클래스는 대부분!-)이지만, 당신은 CookieJar 모든 쿠키를 얻는 인스턴스 (예 : 쿠키 목록을 유지), 쿠키가 주어지면 항아리를 재건하려면 사용합니다. set_cookie 각각에. 그것이 내가 copy_reg 자주 사용해야하는 경우 적절한 기능을 등록하는 방법.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top