我想并行运行从主python脚本调用的多个python脚本。这些子脚本中的每一个都完成后,我想从主脚本中的该子脚本中检索多个值。
在下面的示例中,我启动main.py,然后调用sub.py 10次。然后,我想等到sub.py的所有10个实例完成,然后从每个实例中检索列表。这确实适用于单个数值,但我想检索一串字符串,甚至一个大字符串。
所以,有两个问题...
我正确地执行并行处理吗?仅仅因为它起作用就不能使其“正确”。
是否可以将列表或较大的字符串从sub.py传递回main.py,还是我会停留在单个数字ala退出代码中?
main.py
#
# main.py - main program module
#
import subprocess
import time
procs=[]
# Open 10 python processes
for i in range(10):
procs.append(subprocess.Popen(["python","./sub.py"]))
# Loop until no "None" returned
while True:
for proc in procs:
if proc.poll() == None:
break
else:
break
for proc in procs:
print("{} values".format(proc.poll()))
sub.py
#
# sub.py - Called by main.py
#
# Generate a random list of numbers, then sleep a couple seconds
#
import time
import random
import sys
out = [] # List containing our random values
amt = random.randint(1,10) # How many values to return
slp = random.randint(1,4) # Number of seconds to sleep
# Generate random values in a list
for i in range(amt):
out.append(random.randint(1,10))
print("Sleeping {} seconds.".format(slp))
time.sleep(slp)
sys.exit(out)