Python多线程并发执行两脚本及Windows服务器线程资源分配咨询
问题1:如何实现两个脚本的并发执行
如果是运行两个独立的脚本文件,直接通过命令行分别启动即可,操作系统会自动调度它们并发运行。
如果要在同一个Python进程内整合两个脚本的逻辑并实现并发,分两种场景处理:
- CPU密集型任务:用
ProcessPoolExecutor(多进程,避开GIL限制),将两个脚本的入口函数作为任务提交 - IO密集型任务:用
ThreadPoolExecutor(多线程)
示例代码(假设两个脚本的入口函数分别为script1_main和script2_main):
from concurrent.futures import ProcessPoolExecutor def script1_main(): # 第一个脚本的业务逻辑 pass def script2_main(): # 第二个脚本的业务逻辑 pass if __name__ == '__main__': with ProcessPoolExecutor(max_workers=2) as executor: executor.submit(script1_main) executor.submit(script2_main)
问题2:能否利用剩余CPU资源运行第二个脚本
首先纠正:你提供的第一个脚本使用的是ProcessPoolExecutor,这是多进程而非多线程。
你的服务器有64个逻辑CPU线程,第一个脚本占用了32个进程,只要服务器CPU、内存等资源尚有剩余,完全可以启动第二个脚本,并将其max_workers设为32。操作系统会自动把第二个脚本的进程调度到空闲的CPU线程上,不会直接干扰第一个脚本的运行。
注意事项:
- 第二个脚本同样要在
if __name__ == '__main__':代码块内执行,避免Windows多进程启动的异常 - 若第一个脚本是CPU密集型且已将32个CPU线程跑满,第二个脚本的运行速度会受影响,但不会中断第一个脚本的进程
- 若你实际需求是多线程而非多进程,可将
ProcessPoolExecutor替换为ThreadPoolExecutor,但CPU密集型任务用多线程无法充分利用多核资源,建议优先用多进程
内容的提问来源于stack exchange,提问作者nadhir hasan
相关产品推荐
相关产品推荐

