2013-07-22 106 views
0

我花了好幾個小時來解決其他問題,但一直未能找到解決問題的方法。將變量從一個腳本傳遞到另一個腳本並每隔X分鐘保存到文件

我有一個程序,在某些事件中調用我的Python腳本的參數。基本上每次我的腳本被調用時,我需要它通過一個遞增變量並將其保存到文件中。每次調用它時,我都會直接嘗試(打開,增加一個,並保存文件),但由於有時調用的速度有多快,所以我失去了精度。我想弄清楚如何讓腳本運行並計數,然後每X分鐘將計數寫入文件。我寫的文件部分工作得很好,我只需要幫助如何跟上變量計數並每X分鐘寫入一個文件。

我試着用一個使用線程的腳本來做這件事,但每次調用全局變量聲明都會覆蓋count。感謝提前幫助。

+0

每次腳本運行時,都應該記住它上次運行的時間? – DarenW

+0

該調用可以將增量抽搐發送到隊列,然後每隔幾分鐘或者例程或主程序都可以更新包含計數的文件。 – Jiminion

回答

1

我通讀了您的查詢,我也在互聯網上對此進行了研究。在描述我的研究,我有一對夫婦的查詢:

  1. 是調用主程序您的Python腳本說callee.py也是一個python腳本 ?如果是,是您寫的主腳本還是您有權更改主腳本中的源代碼?
  2. 你是否需要調用你的python腳本來實現異步?

我問這個,因爲如果主程序是由您編寫或 你可以做一些修改的源代碼,並在調用callee.py不需要是一個python腳本異步,那麼你可以使用subprocess.call方法,它將等待callee.py完成。在callee.py中,您將擁有已開發的文件更新計數 - 保存到文件操作。因爲,這些電話本質上是同步的,所以你不必擔心錯過或不正確的計數。

然而,如果你的做法是,主要程序需要調用callee.py asynchronusly或在非Python程序(exe文件),那麼你必須確保同步更新到存儲計數的文件。有關如何執行此操作的查詢已在asked堆棧溢出。此外,請參閱以下Cross Platform File Locking in Python上的鏈接,瞭解有關如何鎖定文件,更新文件然後釋放鎖定的更多信息。

只要存在多個以異步方式從main程序中執行的腳本,該方法就會工作。

我希望這可以指向你的解決方案

+0

謝謝。 1.是的,我可以改變它,但只是最低限度,絕不會阻礙/減慢它的表現。 2.是的。它可能高於100 /秒 不幸的是,我不能等待callee.py完成。將文件隊列鎖定到callee.py並逐一執行它們,還是可能會丟失計數?自從文件被同時訪問以來,我遇到了丟失計數的情況。感謝您的鏈接,我也檢查了他們。 – user2605404

+0

是的,這是對單個共享資源進行併發更新的經典案例(在您的情況下,它是存儲計數的文件)。同步對此文件的訪問是確保在異步場景中正確計數的唯一可靠方法(因爲異步調用通常最終在與主程序運行的線程不同的線程上運行)。另外,由於你的情況有很多這樣的異步調用,這確實是一個與併發有關的問題。 –

+0

因此,鎖定文件應該解決我的問題?我只是想確定:) – user2605404

相關問題