2013-02-28 3 views
-1

스레드 및 큐 라이브러리를 사용하여 스레드를 실행할 때 스레드 실행() 함수에서 오브젝트를 생성합니다. 의 클래스가과 같이 시작한다고 가정 해 봅시다 : 파이썬은 사전의 하나 개의 인스턴스를 생성처럼Python은 동시에 실행될 때 오브젝트의 dictonary 인스턴스 하나만 가지고 있습니다.

class Test(): 
    def __init__(self, dictionary={}): 
     self.dict = dictionary 

내가 다른 스레드에서 사전에 액세스하려고 보인다. 다음은 Thread 클래스이다.

class ThreadTest(threading.Thread): 
    def run(self): 
     while True: 
      // interact with Queue items 
      obj = Test() 
      print "%s - %s" % (self.name, id(obj.dict)) 
      queue.task_done() 

그리고 출력 : 나는이 두 가지를 시작

Thread-1 - 19219616 
Thread-2 - 19219616 

테스트 클래스가 두 번 만들어지기 때문에이 정말 혼란이지만,이 같은 사전을 공유한다.

이 경우 사전의 새 인스턴스를 만드는 방법이 있습니까?

+1

이 질문에 대한 답변이 몇 번이고 예, 변경할 수있는 기본 인수를 사용하지 않으면 극복 할 수 있습니다. –

+0

알겠습니다. 문제가 기본 인수로 인해 발생했는지 알지 못했습니다. 감사! – timp

답변

2

기본 인수는 def 줄을 만났을 때 한 번만 평가됩니다. 따라서 기본 인수 dictionary={}은 모든 인스턴스간에 공유됩니다.

대신 사용 dictionary=None

if dictionary is None: 
    self.dict = {} 
else: 
    self.dict = dictionary 

는 새로운 인스턴스를 각각의 시간을 만들 수 있습니다.

관련 문제