Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一台机器上运行多处理蝗虫_Python_Python Multiprocessing_Locust - Fatal编程技术网

Python 如何在一台机器上运行多处理蝗虫

Python 如何在一台机器上运行多处理蝗虫,python,python-multiprocessing,locust,Python,Python Multiprocessing,Locust,我想蝗虫使用我的电脑上的所有核心 我有很多蝗虫类,我想用蝗虫作为图书馆 我的代码示例: 导入gevent 从hocust.env导入环境 从hocust.stats导入stats\u打印机 从hocust.log导入设置\u日志 导入时间 从Hocust导入HttpUser、任务集、任务 def索引(l): l、 client.get(“/”) def统计数据(l): l、 client.get(“/stats/requests”) 类用户任务(任务集): #可以指定这样的任务 任务=[索引,统

我想蝗虫使用我的电脑上的所有核心

我有很多蝗虫类,我想用蝗虫作为图书馆

我的代码示例:

导入gevent
从hocust.env导入环境
从hocust.stats导入stats\u打印机
从hocust.log导入设置\u日志
导入时间
从Hocust导入HttpUser、任务集、任务
def索引(l):
l、 client.get(“/”)
def统计数据(l):
l、 client.get(“/stats/requests”)
类用户任务(任务集):
#可以指定这样的任务
任务=[索引,统计信息]
#但是使用@task装饰器可能会很方便
@任务
def第404页(自我):
self.client.get(“/不存在”)
类WebsiteUser(HttpUser):
"""
对本地主机上运行的蝗虫web服务器执行请求的用户类
"""
主机=”http://127.0.0.1:8089"
等待时间=介于(2,5)之间
tasks=[UserTasks]
def worker():
env2=环境(用户\类=[WebsiteUser])
env2.创建\u worker\u runner(master\u host=“127.0.0.1”,master\u port=50013)
#环境2.流道启动(10,剖面线率=1)
env2.runner.greenlet.join()
def master():
env1=环境(用户\类=[WebsiteUser])
env1.创建主运行程序(主绑定主机=“127.0.0.1”,主绑定端口=50013)
env1.创建web用户界面(“127.0.0.1”,8089)
环境1.流道启动(20,剖面线率=4)
env1.runner.greenlet.join()
导入多处理
从多处理导入进程
导入时间
过程=[]
过程=过程(目标=主)
过程追加(proc)
程序启动()
时间。睡眠(5)
对于范围内的i(multiprocessing.cpu\u count()):
proc=Process(target=worker)#在没有任何参数的情况下实例化
过程追加(proc)
程序启动()
对于过程中的流程:
process.join()
此代码无法正常工作

(env)➜  test_hocust python main3.py
您正在分布式模式下运行,但未连接工作服务器。请在群集之前连接工人。
回溯(最近一次呼叫最后一次):
文件“src/gevent/greenlet.py”,第854行,在gevent.\u gevent\u cgreenlet.greenlet.run中
client_listener中的文件“/home/alex/projects/performance/env/lib/python3.6/site packages/hocust/runners.py”,第532行
client_id,msg=self.server.recv_from_client()
文件“/home/alex/projects/performance/env/lib/python3.6/site packages/hocust/rpc/zmqrpc.py”,第44行,从客户端接收
msg=Message.unserialize(数据[1])
文件“/home/alex/projects/performance/env/lib/python3.6/site packages/hocust/rpc/protocol.py”,第18行,未序列化
msg=cls(*msgpack.loads(data,raw=False,strict\u map\u key=False))
msgpack.\u unpacker.unpackb中的文件“msgpack/_unpacker.pyx”,第161行
TypeError:unpacb()获得意外的关键字参数“strict\u map\u key”
2020-08-13T11:21:10Z因类型错误而失败
greenlet中未处理的异常:
回溯(最近一次呼叫最后一次):
文件“src/gevent/greenlet.py”,第854行,在gevent.\u gevent\u cgreenlet.greenlet.run中
client_listener中的文件“/home/alex/projects/performance/env/lib/python3.6/site packages/hocust/runners.py”,第532行
client_id,msg=self.server.recv_from_client()
文件“/home/alex/projects/performance/env/lib/python3.6/site packages/hocust/rpc/zmqrpc.py”,第44行,从客户端接收
msg=Message.unserialize(数据[1])
文件“/home/alex/projects/performance/env/lib/python3.6/site packages/hocust/rpc/protocol.py”,第18行,未序列化
msg=cls(*msgpack.loads(data,raw=False,strict\u map\u key=False))
msgpack.\u unpacker.unpackb中的文件“msgpack/_unpacker.pyx”,第161行
TypeError:unpacb()获得意外的关键字参数“strict\u map\u key”
实际结果:工作人员不连接到主机,并且在没有主机的情况下运行用户 预期结果:工作进程仅与主进程一起运行


有什么问题吗?

您不能将
多处理
与蝗虫/gevent一起使用(或者至少已知它会导致问题)


请使用
子进程
或完全不属于蝗虫的东西生成单独的进程。也许您可以修改蝗虫群(),使其能够在同一台机器上运行工作进程。

谢谢您的提问!您能否详细说明运行代码时期望的结果是什么,以及会发生什么?如果可能的话,请编辑原始问题。好的,谢谢。完成。太好了,谢谢你的编辑!您还可以详细说明如何运行代码,以及为什么需要使用python多处理吗?如果我理解正确的话,运行多个蝗虫工作者的首选方法是为每个工作者分配内存,以便充分利用CPU。不过,这表明您的方法也是可行的。我知道如何使用bash脚本在分布式模式下运行Occast,但我的目标是将Occast用作库。我需要使用所有CPU核心,因为我有一个高负载性能的应用程序。