我启动了两个 slave
参数化代码
但是执行时,不断的在报错,有一部分一直在失败,我觉得应该是两个 salve 在并发时,存在重复调用了同一个参数造成的,
接口返回也提示接口参数以重复。我一个 slave 启动就没问题,没报错,请教各位,这种多个 slave 的参数化,该怎么设置,怎么才能
让不同 slave 调用不同的参数呢
因为 locust 的分布式是跨进程的,你的 2 个 slave,对应 2 个进程。你代码里边的 queue,在 2 个进程里边实际上是 2 个实例。相当于 slave1 消费 queue1,slave2 消费 queue2【你可以打印 telqueue 的 ID,肯定是不一样的】所以有提示 userCode 重复。
上面建议你使用 multiprocess 进程的 queue 通信的方式,2 个进程都从一个 Q 中取任务消费,应该不会重复了。
目前有以下解决方案
①:如果你对于 userCode 没有强制的范围要求,只要不同就可以的话。可以一个 rang(1,20w),另外一个 (20w, 40w)。
②:你把 from multiprocessing import Queue 不要放到类里边,你放到最外层。
③:如果以上方法都不行,你可以 google 下如何实现进程间数据共享。
④:如果以上都不行的话,而你必须得用 range(1,20w), 最最挫的方式,你搭个 redis,把所有的数据都放到 redis 里边。userCode,从 redis 里边取。-_-||。
如果以上都不行,我就没招了。
@debugtalk 大佬,这个问题我想你肯定知道,能帮下我吗
你参数化范围(i)都是一样的冲突不是很正常么?试试随机?或者看看 locust 有没有参数传递进来控制一下。
因为 locust 的分布式是跨进程的,你的 2 个 slave,对应 2 个进程。你代码里边的 queue,在 2 个进程里边实际上是 2 个实例。相当于 slave1 消费 queue1,slave2 消费 queue2【你可以打印 telqueue 的 ID,肯定是不一样的】所以有提示 userCode 重复。
上面建议你使用 multiprocess 进程的 queue 通信的方式,2 个进程都从一个 Q 中取任务消费,应该不会重复了。
目前有以下解决方案
①:如果你对于 userCode 没有强制的范围要求,只要不同就可以的话。可以一个 rang(1,20w),另外一个 (20w, 40w)。
②:你把 from multiprocessing import Queue 不要放到类里边,你放到最外层。
③:如果以上方法都不行,你可以 google 下如何实现进程间数据共享。
④:如果以上都不行的话,而你必须得用 range(1,20w), 最最挫的方式,你搭个 redis,把所有的数据都放到 redis 里边。userCode,从 redis 里边取。-_-||。
如果以上都不行,我就没招了。
感谢,上班忙现在才看到,请问你说的第一种方式,一个多少万,一个多少万,怎么在代码里实现,我定义两个队列怎么让第一个 slave 调这个队列,另一个 slave 又调另一个队列啊
最快的分别启动不一样的数据遍历段就行了。上面好像讲到了。
全局设置共享内存还是会竞态的,一定只想随机用同一组,取余%2==0 给 A 用和 %2==1 给 B 用就好了。