Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从正在运行的实例或替代实例导入_Python_Instance_Python Import - Fatal编程技术网

Python:从正在运行的实例或替代实例导入

Python:从正在运行的实例或替代实例导入,python,instance,python-import,Python,Instance,Python Import,我有两个文件,data.py和explorate.py data.py: X = cPickle.load(open("X","r")) from time import sleep X = cPickle.load(open("X","r")) sleep(10**10) #Sleep for eternity 解释.py: from data import X query = raw_input("Enter query") #do something with query and X

我有两个文件,data.py和explorate.py

data.py:

X = cPickle.load(open("X","r"))
from time import sleep
X = cPickle.load(open("X","r"))
sleep(10**10) #Sleep for eternity
解释.py:

from data import X
query = raw_input("Enter query")

#do something with query and X
from data import X #import from live instance of data.py
                   #don't load X all over again
query = raw_input("Enter query")

#do something with query and X
from data import X
while True:
    query = raw_input("Enter query")

    #do something with query and X
物体X非常巨大。我用cPickle把它扔了。 exploration.py将由另一个程序调用,并且由于导入当前的工作方式,每次执行exploration.py时,它都会加载data.py,而data.py会加载X,由于X非常大,因此需要花费大量时间

我希望能做这样的事情

data.py:

X = cPickle.load(open("X","r"))
from time import sleep
X = cPickle.load(open("X","r"))
sleep(10**10) #Sleep for eternity
然后运行data.py

解释.py:

from data import X
query = raw_input("Enter query")

#do something with query and X
from data import X #import from live instance of data.py
                   #don't load X all over again
query = raw_input("Enter query")

#do something with query and X
from data import X
while True:
    query = raw_input("Enter query")

    #do something with query and X

我该怎么做?如果无法从活动实例导入,是否有其他方法来执行我想要执行的操作。我的沟通不是很好,请告诉我您不了解哪些部分,我将尝试进一步澄清。

从我可以告诉您的情况来看,您希望运行守护程序。例如,数据将作为独立的守护进程运行,而不是从EXPLATE导入数据,EXPLATE将通过类似套接字的方式与之通信

但在这一点上,您基本上已经编写了一个数据库,那么为什么不将您拥有的任何数据转换为某个数据库并与数据库通信呢


编辑:问题是你想让这个巨大的对象在进程之间持久化,但它不能像那样工作。每次调用intepret时,都会生成一个新进程,这意味着无法访问上一个进程生成的对象。这就是为什么守护进程(和数据库)存在。

要使其按您希望的方式工作,您需要保持整个Python程序运行,而不是每次都让其他程序以脚本形式执行explorate.py。您需要设置它,以便explorate.py执行一次,并且每次您的程序需要进行查询时,它都使用现有的instance.py程序

对于explorate.py,您可能只需执行以下操作:

from data import X
query = raw_input("Enter query")

#do something with query and X
from data import X #import from live instance of data.py
                   #don't load X all over again
query = raw_input("Enter query")

#do something with query and X
from data import X
while True:
    query = raw_input("Enter query")

    #do something with query and X

然后,您的另一个程序可以在每次需要进行查询时,向其运行的explorate.py程序的stdin写入一行。

我真的不想添加另一层,即数据库。但我想你是对的。您能为python程序提供一种相互通信的方法吗,即在运行时调用彼此的函数?我以前是通过stdin通信来实现这一点的,但这会很麻烦,因为会有多个explorate.py实例在运行,我只是希望系统能够处理多线程,而不是进入多线程,如果我添加另一个数据库,这将是必需的否,在您的用例中不是这样。单独的进程可以通过套接字、unix套接字、命名管道等进行通信。我再次建议使用数据库。这将使它更容易,更不复杂。(再说一次,不管你用什么方法来实现它,你基本上想做的就是写一个数据库。而且有比你或我更好的程序员已经写了一个。)我想你是对的。这是我的一个项目,添加另一层意味着改变我们以前的所有文档[架构视图、驱动程序、需求等],但我想我可以解决这个问题。感谢我正在谈论的另一个程序是一个php文件,它应该调用解释,这将由我的朋友实现。您能为php文件和解释提供另一种通信方式,而不是使用stdin吗?谢谢,您可以按照我的建议将data.py作为守护进程运行,然后让php脚本通过套接字直接与守护进程通信(一起跳过解释)