time.sleep是否会影响ZeroMQ poller.poll响应?

如何解决time.sleep是否会影响ZeroMQ poller.poll响应?

通过轮询发出ZeroMQ - task: PublishTestResults@2 inputs: testResultsFormat: 'JUnit' testResultsFiles: '**/*-junit.xml' searchFolder: '$(Common.TestResultsDirectory)' 请求时,我得到的结果无法解释。

REQ/REP方法所花费的时间受代码中其他地方的poll()影响。

我有一个运行命令的服务器进程,并返回进程的time.sleep()。这是有问题的请求方代码:

import datetime,sys,time,zmq

sleeptime = float(sys.argv[1])

def log_msg(msg):
    print "{0},{1}".format(datetime.datetime.utcnow().strftime('%Y%m%d_%H:%M:%S.%f'),msg)

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://{0}:{1}".format('myserver',9980))
poller = zmq.Poller()
poller.register(socket,zmq.POLLIN)
req = { 'req_type':'raw_cmd','cmd':'echo hello','block':0,'timeout':300,'return_output': 0}

for i in range(4):
    time.sleep(sleeptime)
    socket.send_json(req)
    start = time.time()
    socks = dict((poller.poll(30000)))
    elapsed = (time.time()-start)*1000
    rep = socket.recv_json()
    log_msg('pid={0},sleep={1},time taken={2}'.format(rep['pid'],sleeptime,int(elapsed)))

第一次轮询经过的时间是相当可变的,但是随后的所有轮询所花费的睡眠时间要少约2秒,除非睡眠时间为0(在这种情况下它很快),所以:

pid

20201008_08:27:24.168800,pid=52528,sleep=0.5,time taken=505
20201008_08:27:26.210196,pid=52529,time taken=1540
20201008_08:27:28.250891,pid=52530,time taken=1539
20201008_08:27:30.295036,pid=52531,time taken=1543

sleep = 0.5

20201008_08:44:02.474492,pid=54730,sleep=1.5,time taken=295
20201008_08:44:04.516844,pid=54731,time taken=540
20201008_08:44:06.557980,pid=54732,time taken=539
20201008_08:44:08.599717,pid=54733,time taken=539

sleep = 1.5

20201008_08:27:13.999147,pid=52513,sleep=0.0,time taken=690
20201008_08:27:14.033915,pid=52514,time taken=34
20201008_08:27:14.068803,pid=52515,time taken=34
20201008_08:27:14.103947,pid=52516,time taken=34

问题是,sleep = 0为什么会影响ZeroMQ time.sleep()花费的时间?

解决方法

该代码按原样将苹果与橙子混合:

time.time() 返回自纪元以来的秒,为 float ,即 ( time.time() - start )*1000 产生多少{ {1}}毫秒,是测试中的代码段实际花费的时间。

[ms] 方法的 poller.poll() 期望毫秒数,因此请求的timeout使{{1} }-实例等待并保持,直到30000 [ms]过去或与消息到达相关的poller-事件允许更早地前进到任何地方。

这就是说,您的测量方法不是探索30 [s]方法,而是探索由外部过程随机获取的时间间隔,该过程会将 zmq.POLLIN 端的答案发送给 .sleep() -侧REP-s。

仍然有疑问吗?将睡眠时间设置为 REQ ,您应该收到格式错误的本地时间段报告的持续时间几乎为零(请确保,当且仅当远程.send()所在的实体确实这样做了)不会在这样的操作中死机。

您可能还喜欢具有31 [s]方法的REP类,它为使用ZeroMQ本机zmq.Stopwatch-resolution-clock提供了一个智能工具。我的大部分posts on ZeroMQ表演都将其用于微基准测试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res