与多个 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
我正在通过多个网站抓取数据。 为此,我使用 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