2013-07-22 73 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

相关问题