与多个python程序共享数据

问题描述:

我正在通过多个网站抓取数据。 为此,我使用硒和PhantomJs编写了多个Web刮板。与多个python程序共享数据

这些刮刀返回值。

我的问题是:有没有一种方法可以将这些值提供给一个可以实时排序数据的单个python程序。

我想要做的不是保存该数据以便稍后进行分析,而是希望将其发送给将实时分析它的程序。

我曾尝试:我不知道在哪里甚至开始

你可以尝试写你想要分享的文件中的数据,并有其他脚本阅读和解释。让另一个脚本在循环中运行以检查是否有新文件或文件已更改。

+0

不错的主意,我会尝试使用While True:Loop和time.stop(60)。如果它运行平稳,我会发布该脚本,以便其他人可以看到它。太糟糕了,没有办法在Python程序之间共享数据。 – solidsnake

只需使用文件进行数据交换和简单的锁定机制即可。每个作家或读者(只有一个读者,似乎)得到一个唯一的编号。 如果作者或读者想要写入文件,它将其重命名为其原始名称+数字,然后写入或读取,然后重命名它。 其他人等待文件再次以其自己的名称可用,然后通过以类似方式锁定文件来访问它。

当然,你有共享内存和这样或memmapped文件和信号量。但是这个机制在任何网络上都可以在任何操作系统上完美工作30多年。由于它非常简单。

它实际上是一个穷人的互斥体信号量。 要确定文件是否已更改,请查看其写入时间戳。 但是锁定也是必要的,否则你会陷入混乱。

+0

哇,我承认这不是最性感的解决方案,但它已经在很多专业项目上工作过,软件运行几十年来完美无瑕。很高兴这仍然是值得的。很高兴我开发出大象皮肤。有时候高级的东西会被简单的东西取代,比如JSON的Corba。并非没有理由。 –

也许named pipe将是合适的:

mkfifo whatever(你也可以在你的Python脚本中做到这一点; os.mkfifo

您可以写信给whatever像一个正常的文件(这将阻止,直到东西读它),并用一个不同的过程从whatever读取(它会阻止如果没有可用的数据)

实施例:

# writer.py 

with open('whatever', 'w') as h: 
    h.write('some data') # Blocks until reader.py reads the data 


# reader.py 

with open('whatever', 'r') as h: 
    print(h.read()) # Blocks until writer.py writes to the named pipe