Чтобы запустить 2 или более сценария из сценария python, вы можете использовать пакет subprocess с nohup. Это запустит каждый сценарий в фоновом режиме, что позволит вам запускать их параллельно из одного исходного сценария. Кроме того, в качестве опции этот пример сохранит стандартный вывод каждого сценария в другом файле
import os
from subprocess import call
from subprocess import Popen
# subprocess.call(['python', 'exampleScripts.py', somescript_arg1, somescript_val1,...]).
Popen(['nohup', 'python', 'exampleScripts.py'],
stdout=open('null1', 'w'),
stderr=open('logfile.log', 'a'),
start_new_session=True )
Popen(['nohup', 'python', 'exampleScripts.py'],
stdout=open('null2', 'w'),
stderr=open('logfile.log', 'a'),
start_new_session=True )
Popen(['nohup', 'python', 'exampleScripts.py'],
stdout=open('null3', 'w'),
stderr=open('logfile.log', 'a'),
start_new_session=True )
Вывод: время начала и окончания в каждом сценарии перекрывается, показывая, что второй запускается раньше первого. закончился
(ds_tensorflow) C:\DataScience\SampleNotebooks\Threading>python RunScripts.py
(ds_tensorflow) C:\DataScience\SampleNotebooks\Threading>cat null*
2020-07-13 15:46:21.251606
List processing complete.
2020-07-13 15:46:29.130219
2020-07-13 15:46:22.501599
List processing complete.
2020-07-13 15:46:31.227954
2020-07-13 15:46:23.758498
List processing complete.
2020-07-13 15:46:32.431079
Вы также можете использовать ту же идею с функциями, если хотите сохранить код в одном месте. В этом примере две разные функции будут выполняться два раза параллельно.
Пример функции:
...
import threading
...
def some_function()
# code
def other_function()
# code
if __name__ == "__main__":
jobs = []
#same function run multiple times
threads = 2
for i in range(0, threads):
out_list = list()
thread1 = threading.Thread(target=some_function(size, i, out_list))
jobs.append(thread1)
thread2 = threading.Thread(target=other_function(size, i, out_list))
jobs.append(thread2)
# Start the threads (i.e. calculate the random number lists)
for j in jobs:
j.start()
# Ensure all of the threads have finished
for j in jobs:
j.join()
# continue processing