与多个python程序共享数据
我正在通过多个网站抓取数据。 为此,我使用硒和PhantomJs编写了多个Web刮板。与多个python程序共享数据
这些刮刀返回值。
我的问题是:有没有一种方法可以将这些值提供给一个可以实时排序数据的单个python程序。
我想要做的不是保存该数据以便稍后进行分析,而是希望将其发送给将实时分析它的程序。
我曾尝试:我不知道在哪里甚至开始
你可以尝试写你想要分享的文件中的数据,并有其他脚本阅读和解释。让另一个脚本在循环中运行以检查是否有新文件或文件已更改。
只需使用文件进行数据交换和简单的锁定机制即可。每个作家或读者(只有一个读者,似乎)得到一个唯一的编号。 如果作者或读者想要写入文件,它将其重命名为其原始名称+数字,然后写入或读取,然后重命名它。 其他人等待文件再次以其自己的名称可用,然后通过以类似方式锁定文件来访问它。
当然,你有共享内存和这样或memmapped文件和信号量。但是这个机制在任何网络上都可以在任何操作系统上完美工作30多年。由于它非常简单。
它实际上是一个穷人的互斥体信号量。 要确定文件是否已更改,请查看其写入时间戳。 但是锁定也是必要的,否则你会陷入混乱。
哇,我承认这不是最性感的解决方案,但它已经在很多专业项目上工作过,软件运行几十年来完美无瑕。很高兴这仍然是值得的。很高兴我开发出大象皮肤。有时候高级的东西会被简单的东西取代,比如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
不错的主意,我会尝试使用While True:Loop和time.stop(60)。如果它运行平稳,我会发布该脚本,以便其他人可以看到它。太糟糕了,没有办法在Python程序之间共享数据。 – solidsnake