Python 从特定内存地址/对象引用读取数据
如何读取(并放入新变量)存储在特定内存地址的数据 例如,我知道:Python 从特定内存地址/对象引用读取数据,python,memory,reference,Python,Memory,Reference,如何读取(并放入新变量)存储在特定内存地址的数据 例如,我知道: <nfqueue.queue; proxy of <Swig Object of type 'queue *' at 0xabd2b00> > 在某一点上,新的线程被调用 File2.py: kolejka = nfqueue.queue() 这里创建、绑定和打开队列。然后执行无止境的监听循环。结束它的唯一方法是解除绑定并关闭kolejka,但我希望file1.py能够这样做,因为它是一个“主”程序
<nfqueue.queue; proxy of <Swig Object of type 'queue *' at 0xabd2b00> >
在某一点上,新的线程被调用
File2.py:
kolejka = nfqueue.queue()
这里创建、绑定和打开队列。然后执行无止境的监听循环。结束它的唯一方法是解除绑定并关闭kolejka,但我希望file1.py能够这样做,因为它是一个“主”程序。新线程完成后,如何从文件中检索初始化的kolejka以正确关闭队列
当我尝试时:
from file2 import kolejka
脚本从一开始就执行创建队列的所有过程(它还没有作为函数编写)。您不能-无法从特定地址读取数据。如果您没有(或无法检索)对您感兴趣的对象的引用,那么您就倒霉了 此外,即使您可以从给定的地址读取数据,这也不会有帮助,因为除非您有对原始对象的引用,否则您将无法知道从哪个地址读取数据。然后你就不需要从内存中读取原始数据了
更新-如何干净地终止子进程 在Python中,有几种方法可以在进程之间共享内存(例如模块)。然而,对于你的问题来说,这似乎有点过分了。由于您是从
new_-thread
中启动file2
进程,因此最简单的解决方案可能是使用模块让new_-thread
在主程序退出时告诉file2
进程退出
这允许file2.py
在关闭前执行任何需要的清理,而且这也是一个干净的解决方案,因为file1.py
不需要知道如何关闭file2.py
的详细信息,使您的代码更模块化,更易于维护
file1.py
file2.py
那么,从另一个(正在运行的)python脚本获取变量引用的最佳方法是什么?“从script2导入变量”是否起作用?如果所需变量位于函数SomeFunc()中该怎么办?如果没有关于问题的更多信息,很难给出一个好的答案。你能用一些代码示例来说明你的问题吗?用一个简短的例子来说明变量是在哪里定义的,以及在哪里需要使用它,这将非常好。我希望我的描述将有助于想象我正在努力解决的问题。谢谢,现在你想要实现的目标更加清晰了。我已经更新了我的答案,建议如何干净地终止这两个进程-希望这有帮助!工作完美。感谢您再次提醒我信号确实存在:)
from file2 import kolejka
def run(self):
...
child_process = subprocess.Popen(args, ...)
...
# time to quit - tell file2 to terminate
child_process.terminate()
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)