Чтение данных с определенного адреса / ссылки на объект

Как я могу читать (и вводить в новую переменную) данные, хранящиеся на определенном адресе памяти?

Например, я знаю, что:

<nfqueue.queue; proxy of <Swig Object of type 'queue *' at 0xabd2b00> > 

И я хочу, чтобы данные хранились в 0xabd2b00 в новой переменной, чтобы я мог работать и использовать все функциональные возможности объекта. Предположим, что у меня нет доступа к исходной переменной, создавшей этот объект.

ОБНОВЛЕНИЕ: на этот вопрос был дан ответ, поэтому я обновляю свой вопрос. Предположим, у меня есть два файла python: file1.py и file2.py

File1.py:

 .... rest of the code .... class new_thread(threading.Thread): def __init__(self, obj): self.obj = obj threading.Thread.__init__(self) def run(self): str = 'python file2.py' args = shlex.split(str3) tmp = subprocess.Popen(args, stdout=open('/dev/null','w'), stderr=open('/dev/null', 'w')) .... rest of the code .... 

В какой-то момент вызывается нить new_thread.

File2.py:

 kolejka = nfqueue.queue() 

Здесь очередь создается, привязывается и открывается. Затем выполняется бесконечный цикл для прослушивания. Единственный способ закончить это – развязать и закрыть kolejka, но я хочу file1.py сделать это, поскольку это «основная» программа. Как я могу получить инициализированную kolejka из файла, чтобы закрыть очередь правильно после new_thread?

Когда я пытаюсь:

 from file2 import kolejka 

Скрипт выполняет всю процедуру создания очереди с самого начала (она не была написана как функция).

Вы не можете – нет способа читать данные с определенного адреса. Если у вас нет (или не может получить) ссылку на интересующий вас объект, вам не повезло.

Кроме того, даже если вы могли бы читать данные с определенного адреса, это не помогло бы, так как вам не удастся узнать, какой адрес читать, если у вас нет ссылки на исходный объект. И тогда вам не нужно будет сначала считывать необработанные данные из памяти.


Обновление – Как закончить дочерний процесс

Существуют способы совместного использования памяти между процессами в Python (например, модуль многопроцессорности ). Тем не менее, это кажется немного излишним для вашей проблемы. Поскольку вы начинаете процесс file2 изнутри new_thread , самым простым решением, вероятно, является использование сигнального модуля, чтобы new_thread сообщал, что процесс file2 завершается, когда заканчивается основная программа.

Это позволяет file2.py выполнять любую очистку, необходимую перед выключением, а также является чистым решением, так как file1.py не нуждается в подробностях о том, как отключить file2.py , делая ваш код более модульным и более простым в обслуживании ,

file1.py

 def run(self): ... child_process = subprocess.Popen(args, ...) ... # time to quit - tell file2 to terminate child_process.terminate() 

file2.py

 import signal import sys ... kolejka = nfqueue.queue() ... def sigterm_handler(signum, frame): # close kolejka and do any other cleanup needed, then do: sys.exit() # Make sure sigterm_handler() is run when file1.py tells us # to quit using child_process.terminate() signal.signal(signal.SIGTERM, sigterm_handler)