我正在通過多個網站抓取數據。 爲此,我使用硒和PhantomJs編寫了多個Web刮板。與多個python程序共享數據
這些刮刀返回值。
我的問題是:有沒有一種方法可以將這些值提供給一個可以實時排序數據的單個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