2016-08-03 77 views
0

我正在通過多個網站抓取數據。 爲此,我使用硒和PhantomJs編寫了多個Web刮板。與多個python程序共享數據

這些刮刀返回值。

我的問題是:有沒有一種方法可以將這些值提供給一個可以實時排序數據的單個python程序。

我想要做的不是保存該數據以便稍後進行分析,而是希望將其發送給將實時分析它的程序。

我曾嘗試:我不知道在哪裏甚至開始

回答

-1

你可以嘗試寫你想要分享的文件中的數據,並有其他腳本閱讀和解釋。讓另一個腳本在循環中運行以檢查是否有新文件或文件已更改。

+0

不錯的主意,我會嘗試使用While True:Loop和time.stop(60)。如果它運行平穩,我會發布該腳本,以便其他人可以看到它。太糟糕了,沒有辦法在Python程序之間共享數據。 – solidsnake

-1

只需使用文件進行數據交換和簡單的鎖定機制即可。每個作家或讀者(只有一個讀者,似乎)得到一個唯一的編號。 如果作者或讀者想要寫入文件,它將其重命名爲其原始名稱+數字,然後寫入或讀取,然後重命名它。 其他人等待文件再次以其自己的名稱可用,然後通過以類似方式鎖定文件來訪問它。

當然,你有共享內存和這樣或memmapped文件和信號量。但是這個機制在任何網絡上都可以在任何操作系統上完美工作30多年。由於它非常簡單。

它實際上是一個窮人的互斥體信號量。 要確定文件是否已更改,請查看其寫入時間戳。 但是鎖定也是必要的,否則你會陷入混亂。

+0

哇,我承認這不是最性感的解決方案,但它已經在很多專業項目上工作過,軟件運行幾十年來完美無瑕。很高興這仍然是值得的。很高興我開發出大象皮膚。有時候高級的東西會被簡單的東西取代,比如JSON的Corba。並非沒有理由。 –

0

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