Python:如何同时执行100个进程?
我想要实现的目标: 我想同时运行100个进程,因为作为for循环执行时需要花费太多时间。例如:使用For循环,我的函数将等到发送第一个请求后再发送第二个请求。但我希望100个请求同时发送 实际结果: 我的函数不会同时执行进程。它一个接一个地执行一个进程 预期结果: 我试过的:所以我试着用多处理模块同时运行100个进程,但并没有达到预期效果。当我试图在我的代码中实现多处理模块时,它的运行方式与没有多处理的版本相同,通过逐个运行一个进程 我可能会错过什么 这是我以前使用的代码 无多处理的版本: 这是我试图用来解决我的问题的代码 多处理版本: 如何同时执行所有流程 如果有比多重处理更好的解决方案来实现我想要的,请让我知道 更新 我现在可以同时运行我的进程了 使用多处理更新版本:Python:如何同时执行100个进程?,python,parallel-processing,multiprocessing,locking,Python,Parallel Processing,Multiprocessing,Locking,我想要实现的目标: 我想同时运行100个进程,因为作为for循环执行时需要花费太多时间。例如:使用For循环,我的函数将等到发送第一个请求后再发送第二个请求。但我希望100个请求同时发送 实际结果: 我的函数不会同时执行进程。它一个接一个地执行一个进程 预期结果: 我试过的:所以我试着用多处理模块同时运行100个进程,但并没有达到预期效果。当我试图在我的代码中实现多处理模块时,它的运行方式与没有多处理的版本相同,通过逐个运行一个进程 我可能会错过什么 这是我以前使用的代码 无多处理的版本: 这是
我删除了代码的锁,现在它可以工作了。锁似乎阻止了其他进程同时运行。您可能希望尝试上一层,通过使用bash在for循环中输入脚本的参数执行并发请求。从我在您的代码中所读到的内容来看,您希望并行运行的进程(您正在发出的请求)之间似乎没有任何依赖关系,因此,假设可以安全地将这些进程作为对同一python脚本的100个单独调用来运行,并让操作系统担心并发性 您应该能够通过在bash for循环中添加参数来实现这一点,如下所示:
for i in {2..100}
do
run_script.py $i
done
然后在python脚本中,使用sys模块获取该参数
if __name__ == "__main__":
i = sys.argv[1] # 0 is the name of the script being ran (e.g. run_script.py)
funct(i)
然后重写funct函数以处理参数。我希望这有帮助
另外,如果您需要进行更复杂的流程协调,调用库可以提供很大帮助:很多人并不关心如何学习Python中的多处理。他们只是想把事情做完 其中一些使用GNU并行为它们执行多处理。这样,他们只需要制作一个单线程程序,该程序接受一个参数 在您的情况下,您应该能够进行以下更改:
def函数(i):
名称=读取数据(路径、图纸名称、i、1)
data=“name”:{}.format(name)
s=请求。会话()
session=s.post(url,headers=s.headers,data=data)
if uuuu name uuuuu==“uuuuu main”:if uuuuuuu name uuuuuuuu==“uuuuu main”:
函数(sys.argv[1])
然后您可以运行:
seq 200 | parallel --jobs 100 python myscript.py {}
您使用什么CPU可以同时运行100个进程?您可以使用协程。它的设计目的是最小化I/O等待时间。这里有一个请求的例子:@Chris-由于工作负载包括一个远程
请求
调用,因此每个cpu有多个进程是合理的。100可能有点大,但只要工作负载不占用内存并导致交换,它就可以了。当多处理都等待其他处理完成时,您就击败了多处理。您可以从父进程中的电子表格中收集信息,并将其传递给子进程。@t谢谢!现在它起作用了。我删除了args的锁,只允许我作为args。谢谢,我将查看调用库。
for i in {2..100}
do
run_script.py $i
done
if __name__ == "__main__":
i = sys.argv[1] # 0 is the name of the script being ran (e.g. run_script.py)
funct(i)
seq 200 | parallel --jobs 100 python myscript.py {}