【问题标题】:Locust gevent syntax?蝗虫gevent语法?
【发布时间】:2021-03-01 17:33:45
【问题描述】:

我在同一个域上成功地运行了 locust 以获取 GET 请求,无论是使用 docker 还是在本地。 但我不能让它与 websocket 一起工作。

我的 locustfile.py:

import time, websocket
from locust import HttpUser, task, between, events
from websocket import create_connection
import gevent

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)
    @task
    def on_start(self):
       ws = create_connection('wss://REDACTED.com')
       g = gevent.spawn(self.connect)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.subscribe)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.send)
       g.get(block=True, timeout=10)       
       
    def _receive():
       while True:
          res = ws.recv()
          events.request_success.fire(
             request_type='Websocket Receive Message',
             name='test websocket message receive',
             response_time=0,
             response_length=len(res)

    gevent.spawn(_receive)

(取自https://medium.com/@rajatsaxena120/websockets-in-python-d91c7bc2fd22

我不断得到:

  File "./locustfile.py", line 27
    gevent.spawn(_receive)
    ^
SyntaxError: invalid syntax

我还注意到docker镜像中缺少websocket,一旦py文件不正确,容器退出时如何添加pip install websocket-client

谢谢!

【问题讨论】:

  • 数一数你的括号!
  • 是的,看来括号是问题所在。 events.request_success.fire( 的结尾括号在哪里?我已在my answer 中修复它

标签: python websocket locust


【解决方案1】:

您只是缺少显示该行的结尾括号

events.request_success.fire(

这是你的代码修复:

import time, websocket
from locust import HttpUser, task, between, events
from websocket import create_connection
import gevent

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)
    @task
    def on_start(self):
       ws = create_connection('wss://REDACTED.com')
       g = gevent.spawn(self.connect)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.subscribe)
       g.get(block=True, timeout=10)
       g = gevent.spawn(self.send)
       g.get(block=True, timeout=10)       
       
    def _receive():
       while True:
          res = ws.recv()
          events.request_success.fire(
             request_type='Websocket Receive Message',
             name='test websocket message receive',
             response_time=0,
             response_length=len(res)
          )
    gevent.spawn(_receive)

【讨论】:

  • 你是对的,不是我的错,请查看上面的链接。现在我在 _receive res = ws.recv() NameError: name 'ws' is not defined ```跨度>
  • @phm:我很确定问题在于ws 的功能不同,但我对蝗虫了解不多。也许尝试全局变量?
猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多