我试图以特定间隔执行一定数量的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 file
(test_01.py
)。这将继续执行一段时间。在1 minute
过去后,我想开始同时执行second file
(test_02.py
)。这也将继续执行一段时间。像这样我想在1分钟的间隙后开始执行所有脚本。
使用上面的代码,我注意到执行是在其他文件之后发生的,而不是同时发生,因为这些文件中的打印语句一个接一个地出现而没有混淆。
如何实现以上所需的功能?
答案 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
如果不知道您尝试创建的线程数量或者内存密集程度如何,如果应该寻求更好的解决方案,则很难。由于您似乎正在考虑基本上彼此独立地执行多个脚本(没有共享数据),您还可以在此处查看多处理模块:
答案 1 :(得分:0)
如果您需要它们并行运行,则需要查看线程。根据您使用的python版本,查看https://docs.python.org/3/library/threading.html或https://docs.python.org/2/library/threading.html。