2017-12-13 25 views
0

some_function.py이 필요로하는 개체로 deserialize하는 큰 이진 파일 large_file.pkl을 고려하십시오. 순전히, some_function.py이 실행될 때마다 large_file.pkl을 역 직렬화 할 수는 있지만 (내 경우, 플라스크 서버에 요청할 때마다) 느려질 수 있으며 동시에 여러 스레드에서 some_function.py을 실행할 수 없습니다. large_file.pkl을 deserialize 할 파이썬 방법이 있습니까? 메모리에 해당 객체 인스턴스를 저장하고 some_function.py이 실행되는 각 스레드에서 필요에 따라 사용 하시겠습니까?파이썬 서버에서 여러 번 쓰고 여러 스레드를 사용하기 위해 데이터를 한 번 직렬화하는 방법은 무엇입니까?

나는 기본적으로이 수행하는 파일 unpickler.py 만들려고 한 : 나는 global 일을 생각하는 방식에 따라, 그리고

from pickle import load 
def create_global_large_object(): 
    global large_object 
    with open('large_file.pkl', 'rb') as f: 
     large_object = pickle.load(f) 

을, 나는 some_function.py에서 다음을 수행하십시오 그러나

def run(): 
    ... 
    large_object.cool_method() 
    ... 

, 다음 테스트를 실행할 때 :

from unpickler import create_global_large_object 
from some_function import run 
def test_idea(): 
    create_global_large_object() 
    run() 

나는 NameError: name 'large_object' is not defined이됩니다.

unpickler.large_object.cool_method() 

답변

0

large_object

그래서 당신은 import unpickler에 필요한 다른 모듈에서 액세스하고 다음과 같이 호출하려면 unpickler 모듈의 세계입니다 우리는 명시 적으로`create_global_lage_object()`를 호출하고, some_function.run()이`unpickler.create_global_lage_object()`를 수행하면,이 연습의 목적을 무효로합니다. 왜냐하면 그렇게 할 때`large_file.pkl`을 deserialize 할 것이기 때문입니다.
+0

'large_object'이하지 않는 unpickler.py''에 정의되지 않은 : –