与多个 python 程序共享数据

Sharing data with multiple python programms

我正在通过多个网站抓取数据。 为此,我使用 selenium 和 PhantomJs 编写了多个网络抓取工具。

那些爬虫 return 值。

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

我想做的不是保存该数据以供以后分析,我想将其发送到一个程序,该程序将对其进行实时分析。

我尝试了什么:我什至不知道从哪里开始

您可以尝试将要共享的数据写入文件,让其他脚本读取和解释它。让另一个脚本 运行 循环检查是否有新文件或文件已更改。

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

当然你有共享内存等等,或者内存映射文件和信号量。但是这种机制在任何 OS、任何网络上对我来说已经完美运行了 30 多年。因为它非常简单。

它实际上是一个穷人的互斥信号量。 要查明文件是否已更改,请查看其写入时间戳。 但是加锁也是必须的,不然会乱七八糟的。

也许 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