gpt4 book ai didi

python - 如何在单台机器上使用多处理运行 Locust

转载 作者:行者123 更新时间:2023-12-04 13:34:03 24 4
gpt4 key购买 nike

我希望 Locust 使用我 PC 上的所有内核。
我有很多 Locust 类,我想使用 Locust 作为库。
我的代码示例:

import gevent
from locust.env import Environment
from locust.stats import stats_printer
from locust.log import setup_logging
import time



from locust import HttpUser, TaskSet, task, between


def index(l):
l.client.get("/")

def stats(l):
l.client.get("/stats/requests")

class UserTasks(TaskSet):
# one can specify tasks like this
tasks = [index, stats]

# but it might be convenient to use the @task decorator
@task
def page404(self):
self.client.get("/does_not_exist")

class WebsiteUser(HttpUser):
"""
User class that does requests to the locust web server running on localhost
"""
host = "http://127.0.0.1:8089"
wait_time = between(2, 5)
tasks = [UserTasks]

def worker():
env2 = Environment(user_classes=[WebsiteUser])
env2.create_worker_runner(master_host="127.0.0.1", master_port=50013)
# env2.runner.start(10, hatch_rate=1)
env2.runner.greenlet.join()

def master():
env1 = Environment(user_classes=[WebsiteUser])
env1.create_master_runner(master_bind_host="127.0.0.1", master_bind_port=50013)
env1.create_web_ui("127.0.0.1", 8089)
env1.runner.start(20, hatch_rate=4)
env1.runner.greenlet.join()

import multiprocessing
from multiprocessing import Process
import time


procs = []

proc = Process(target=master)
procs.append(proc)
proc.start()

time.sleep(5)

for i in range(multiprocessing.cpu_count()):
proc = Process(target=worker) # instantiating without any argument
procs.append(proc)
proc.start()

for process in procs:
process.join()
此代码无法正常工作。
(env) ➜  test_locust python main3.py
You are running in distributed mode but have no worker servers connected. Please connect workers prior to swarming.
Traceback (most recent call last):
File "src/gevent/greenlet.py", line 854, in gevent._gevent_cgreenlet.Greenlet.run
File "/home/alex/projects/performance/env/lib/python3.6/site-packages/locust/runners.py", line 532, in client_listener
client_id, msg = self.server.recv_from_client()
File "/home/alex/projects/performance/env/lib/python3.6/site-packages/locust/rpc/zmqrpc.py", line 44, in recv_from_client
msg = Message.unserialize(data[1])
File "/home/alex/projects/performance/env/lib/python3.6/site-packages/locust/rpc/protocol.py", line 18, in unserialize
msg = cls(*msgpack.loads(data, raw=False, strict_map_key=False))
File "msgpack/_unpacker.pyx", line 161, in msgpack._unpacker.unpackb
TypeError: unpackb() got an unexpected keyword argument 'strict_map_key'
2020-08-13T11:21:10Z <Greenlet at 0x7f8cf300c848: <bound method MasterRunner.client_listener of <locust.runners.MasterRunner object at 0x7f8cf2f531d0>>> failed with TypeError

Unhandled exception in greenlet: <Greenlet at 0x7f8cf300c848: <bound method MasterRunner.client_listener of <locust.runners.MasterRunner object at 0x7f8cf2f531d0>>>
Traceback (most recent call last):
File "src/gevent/greenlet.py", line 854, in gevent._gevent_cgreenlet.Greenlet.run
File "/home/alex/projects/performance/env/lib/python3.6/site-packages/locust/runners.py", line 532, in client_listener
client_id, msg = self.server.recv_from_client()
File "/home/alex/projects/performance/env/lib/python3.6/site-packages/locust/rpc/zmqrpc.py", line 44, in recv_from_client
msg = Message.unserialize(data[1])
File "/home/alex/projects/performance/env/lib/python3.6/site-packages/locust/rpc/protocol.py", line 18, in unserialize
msg = cls(*msgpack.loads(data, raw=False, strict_map_key=False))
File "msgpack/_unpacker.pyx", line 161, in msgpack._unpacker.unpackb
TypeError: unpackb() got an unexpected keyword argument 'strict_map_key'
实际结果:worker 不会连接到 master 并在没有 master 的情况下运行用户
预期结果:工作人员仅与主人一起运行。
怎么了?

最佳答案

您不能使用 multiprocessing与 Locust/gevent 一起(或至少已知会导致问题)。
请使用 subprocess 生成单独的进程或完全在蝗虫之外的东西。也许您可以修改 locust-swarm ( https://github.com/SvenskaSpel/locust-swarm ) 以使其能够在同一台机器上运行工作进程。

关于python - 如何在单台机器上使用多处理运行 Locust,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63302036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com