我有一个python脚本,它调用另一个python文件并运行它。但是,我需要该脚本多次并行运行同一文件。我将在这里共享代码片段。这将运行一次python文件。
output = os.popen('python py_generator_sm20.py' + options)
print output.read()
如何并行化它以同时运行多次?
答案 0 :(得分:0)
由于代码的使用output
部分,这可能无法完全回答您,但可能是一个起点。multiprocessing
模块,您可以创建一个池数量的工作人员,然后使用subprocess
模块可以为每个工作人员和check the output调用脚本的一个实例:
import multiprocessing as mp
import subprocess as sp
# an example with two runs
commands = ['python test.py', 'python test.py']
# pass the number of threads that will be working
# if the number of threads < len(commands) the exceed
# will run in sequence when some process terminate
pool = mp.Pool(processes=2)
# execute the script calls
res = pool.map(sp.check_output, commands)
print(*[item.decode() for item in res])
pool.close()
注意:check_output
的返回值是byte string
,因此您需要将其转换回string
我使用以下简单程序对其进行了测试:
import time
if __name__ == "__main__":
print("Running an instance at {}".format(time.ctime()))
time.sleep(2)
print("Finished at {}".format(time.ctime()))
这就是输出:
Running an instance at Thu Oct 11 23:21:44 2018
Finished at Thu Oct 11 23:21:46 2018
Running an instance at Thu Oct 11 23:21:44 2018
Finished at Thu Oct 11 23:21:46 2018
您可以看到它们同时运行。
答案 1 :(得分:0)
我认为您需要这个:
from multiprocessing.dummy import Pool as ThreadPool
pt = ThreadPool(4)
results = pt.map(pt_function, pt_array)
或者也许是这种方式(如果您有很多线程脚本):
from Threading_orders import Thread
class First_time(Thread):
"""
A threading example
"""
def __init__(self, a, b):
"""Инициализация потока"""
Thread.__init__(self)
self.a = a
self.b = b
def run(self):
MyThread_1(self.a, self.b)
MyThread_2(self.a, self.b)
MyThread_3(self.a, self.b)