使蝗虫在任务运行之间等待

时间:2019-05-01 21:39:07

标签: python rabbitmq locust

我正在使用Locust将消息推送到RabbitMQ队列中。我可以使用locust.io-demo存储库中的RabbitMQ示例轻松完成此操作,但是现在我需要强制单个任务在每次调用之间等待1分钟。

在我的测试中,我需要每分钟将100条消息放入队列中,因为该系统将以一分钟为增量接收“突发”消息。我曾尝试实现此功能,但未成功。这是我尝试的第一件事:

from rabbitmq import get_client
import time

from locust import Locust, TaskSet, task, events

class RabbitTaskSet(TaskSet):
    @task
    def publish(self):
        get_client().publish()

class MyLocust(Locust):
    task_set = RabbitTaskSet
    min_wait = 30000
    max_wait = 30000

def on_locust_stop_hatching():
    get_client().disconnect()

events.locust_stop_hatching += on_locust_stop_hatching

我假设publish方法每30秒执行一次,因为这是最小和最大等待时间的值。然后,我以1位用户和1的孵化率启动了Locust。

我看到的是每10秒在Locust UI中生成一个新请求。

然后我尝试了以下方法:

class RabbitTaskSet(TaskSet):
    @task
    def publish(self):
        get_client().publish()
        time.sleep(30)

class MyLocust(Locust):
    task_set = RabbitTaskSet
    # min_wait = 30000
    # max_wait = 30000

然后我再次以1位用户和1的孵化率启动了Locust。奇怪的是,我看到了相同的结果-每10秒发出1个新请求。哎呀,我什至尝试使用gevent.time代替time.time,但我仍然得到相同的结果。

如何使我的发布任务在每次执行之间等待30秒?是否有我所缺少的财产?

1 个答案:

答案 0 :(得分:0)

使用此代码

from rabbitmq import get_client
import time

from locust import Locust, TaskSet, task, events,between

class RabbitTaskSet(TaskSet):
    @task
    def publish(self):
        get_client().publish()

class MyLocust(Locust):
    task_set = RabbitTaskSet
    wait_time = between(5000, 10000)


def on_locust_stop_hatching():
    get_client().disconnect()