从主脚本并行运行多个 python 脚本
Posted
技术标签:
【中文标题】从主脚本并行运行多个 python 脚本【英文标题】:Run multiple python scripts in parallel from master script 【发布时间】:2021-12-19 11:40:04 【问题描述】:我想并行运行多个 python 脚本并从一个主脚本启动它们。我确实在之前提出的问题中找到了解决方案,但是,如果并行运行的脚本包含循环,这些都不起作用。 例如,我们定义两个脚本。
脚本 1:
array_1 = []
x = 0
while True:
array_1.append(x)
x = x + 1
脚本 2:
array_2 = []
x = 0
while True:
array_2.append(x)
x = x + 1
现在我想同时运行这两个进程。以前的解决方案建议主脚本使用以下代码:
import script_1, script_2
exec(open(script_1))
exec(open(script_2))
虽然这是从另一个脚本中启动脚本的解决方案,但是这不会并行运行这两个脚本。 这样的主脚本实际上应该是什么样子?
感谢您的建议!
编辑
我尝试了以下线程方法:
def function_1():
print('function 1 started...')
while True:
print('1')
sleep(1)
def function_2():
print('function 2 started...')
while True:
print('2')
sleep(1)
thread_1 = Thread(target=function_1())
thread_2 = Thread(target=function_2())
thread_1.start()
thread_2.start()
thread_1.join()
thread_2.join()
print("thread finished")
它不起作用,只有第一个函数启动,所以我得到以下输出:
function 1 started...
1
1
1
1
1
1
【问题讨论】:
将子脚本封装在函数中,在新线程中运行每个函数 我希望你不要真的尝试运行该代码,除非你故意试图引发 MemoryError 好的,谢谢。只是一个示例代码;) 我试过了,可惜没用。 你需要将函数作为参数传递,而不是调用它(去掉括号:Thread(target=function1)
【参考方案1】:
当你想产生一个新线程时,你需要传递你希望线程执行的函数的地址,而不是调用它。您在这里所做的实际上是生成一个新线程,该线程立即调用function_1()
,当然它会永远运行。
另外,您将无法访问这行代码:
print("thread finished")
由于线程正在执行一个 while 循环 - 永远,所以它是冗余的..
from time import sleep
from threading import Thread
def function_1():
print('function 1 started...')
while True:
print('1')
sleep(1)
def function_2():
print('function 2 started...')
while True:
print('2')
sleep(1)
thread_1 = Thread(target=function_1)
thread_2 = Thread(target=function_2)
thread_1.start()
thread_2.start()
thread_1.join()
thread_2.join()
# print("thread finished") - redundant
【讨论】:
以上是关于从主脚本并行运行多个 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章