在python中从单个脚本运行多个脚本



我有两个脚本Server.pyServerGUI.py。我希望它们独立并行运行。假设我制作了另一个脚本main.py。我如何从main运行Server.pyServerGUI.py

你能给我推荐main.py的代码吗?

要在python脚本中运行2个或多个脚本,可以使用带有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:DataScienceSampleNotebooksThreading>python RunScripts.py
(ds_tensorflow) C:DataScienceSampleNotebooksThreading>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

您可以使用threadingmultiprocessing'并行运行python脚本。

线程:https://www.tutorialspoint.com/python/python_multithreading.htm

多处理器:https://www.tutorialspoint.com/multiprocessing-in-python#:~:text=%20多处理%20包%20支持%20派生,与%20线程%20模块%20相似。

希望这能帮助你

您可以按照以下方式执行操作(例如,我假设您的脚本接受两个参数arg1arg2。这需要根据您的具体需求进行修改。(:

  1. 如果你有"主";server.py和servergui.py中的函数:
import threading
from server import server_main
from servergui import server_gui_main
thread_list = []
thread_list.append(
threading.Thread(target=server_main, args=(arg1, arg2))
)
thread_list.append(
threading.Thread(target=server_gui_main, args=(arg1, arg2))
)
for thread in thread_list:
thread.start()
for thread in thread_list:
thread.join()

以上内容将在单独的线程中启动两个主要函数。

如果您想要单独的并行进程,请使用multithreading:

import multiprocessing
process_list = []
process_list.append(
multiprocessing.Process(target=server_main, args=(arg1, arg2))
)
process_list.append(
multiprocessing.Process(target=server_gui_main, args=(arg1, arg2))
)
for process in process_list:
process.start()
for process in process_list:
process.join()

如您所见,multiprocessingthreading的API差异很小。但是,如果执行CPU受限的任务,threading可能会影响您的性能。这是因为Python GIL强制Python在任何给定时刻只运行一个线程。因此,如果您有CPU密集型任务,则应该使用multiprocessing,因为这会创建确实并行运行的独立进程。

  1. 如果您想像从命令行启动server.py和servergui.py一样启动它们:
import subprocess
subprocess.run(
['python', 'server.py', 'arg1', 'arg2'],
shell=True
)
subprocess.run(
['python', 'servergui.py', 'arg1', 'arg2'],
shell=True
)

相关内容

  • 没有找到相关文章

最新更新