尝试以特定间隔执行一定数量的python脚本时出现问题

时间:2015-03-06 20:48:10

标签: python concurrency timer scheduler

我试图以特定间隔执行一定数量的python scripts。每个脚本都需要花费大量时间来执行,因此我不想浪费时间等待顺序运行它们。我厌倦了这段代码,但它没有同时执行它们并逐个执行它们:

Main_file.py

import time
def func(argument):

    print 'Starting the execution for argument:',argument
    execfile('test_'+argument+'.py')


if __name__ == '__main__':

    arg = ['01','02','03','04','05']

    for val in arg:
        func(val)
        time.sleep(60)

我想要的是开始执行first filetest_01.py)。这将继续执行一段时间。在1 minute过去后,我想开始同时执行second filetest_02.py)。这也将继续执行一段时间。像这样我想在1分钟的间隙后开始执行所有脚本。

使用上面的代码,我注意到执行是在其他文件之后发生的,而不是同时发生,因为这些文件中的打印语句一个接一个地出现而没有混淆。

如何实现以上所需的功能?

2 个答案:

答案 0 :(得分:2)

在我的计算机上使用python 2.7,当使用以下代码进行线程化时,以下似乎可以使用小python脚本作为test_01.py,test_02.py等:

import time
import thread

def func(argument):
    print('Starting the execution for argument:',argument)
    execfile('test_'+argument+'.py')


if __name__ == '__main__':

    arg = ['01','02','03']

    for val in arg:
        thread.start_new_thread(func, (val,))
        time.sleep(10)

但是,您表示您一直收到内存异常错误。这可能是由于您的脚本使用的堆栈内存多于分配给它们的堆栈内存,因为每个线程默认分配8 kb(在Linux上)。你可以通过调用

来尝试给他们更多的记忆
thread.stack_size([size])

在此处列出:https://docs.python.org/2/library/thread.html

如果不知道您尝试创建的线程数量或者内存密集程度如何,如果应该寻求更好的解决方案,则很难。由于您似乎正在考虑基本上彼此独立地执行多个脚本(没有共享数据),您还可以在此处查看多处理模块:

https://docs.python.org/2/library/multiprocessing.html

答案 1 :(得分:0)

如果您需要它们并行运行,则需要查看线程。根据您使用的python版本,查看https://docs.python.org/3/library/threading.htmlhttps://docs.python.org/2/library/threading.html