Python:如何同时执行100个进程?

Python:如何同时执行100个进程?,python,parallel-processing,multiprocessing,locking,Python,Parallel Processing,Multiprocessing,Locking,我想要实现的目标: 我想同时运行100个进程,因为作为for循环执行时需要花费太多时间。例如:使用For循环,我的函数将等到发送第一个请求后再发送第二个请求。但我希望100个请求同时发送 实际结果: 我的函数不会同时执行进程。它一个接一个地执行一个进程 预期结果: 我试过的:所以我试着用多处理模块同时运行100个进程,但并没有达到预期效果。当我试图在我的代码中实现多处理模块时,它的运行方式与没有多处理的版本相同,通过逐个运行一个进程 我可能会错过什么 这是我以前使用的代码 无多处理的版本: 这是

我想要实现的目标

我想同时运行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 {}