当使用轮询发出ZeroMQREQ/REP
请求时,我得到了无法解释的结果。
由轮询()
-方法占用的时间受到代码中其他地方的time.sleep()
的影响。
我有一个服务器进程,它运行一个命令,并返回进程的pid
。这是请求端代码,它有以下问题:
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,在这种情况下,睡眠时间很快,因此:
sleep=0.5
:
20201008_08:27:24.168800, pid=52528, sleep=0.5, time taken=505 20201008_08:27:26.210196, pid=52529, sleep=0.5, time taken=1540 20201008_08:27:28.250891, pid=52530, sleep=0.5, time taken=1539 20201008_08:27:30.295036, pid=52531, sleep=0.5, time taken=1543
睡眠=1.5
:
20201008_08:44:02.474492, pid=54730, sleep=1.5, time taken=295 20201008_08:44:04.516844, pid=54731, sleep=1.5, time taken=540 20201008_08:44:06.557980, pid=54732, sleep=1.5, time taken=539 20201008_08:44:08.599717, pid=54733, sleep=1.5, time taken=539
睡眠=0
:
20201008_08:27:13.999147, pid=52513, sleep=0.0, time taken=690 20201008_08:27:14.033915, pid=52514, sleep=0.0, time taken=34 20201008_08:27:14.068803, pid=52515, sleep=0.0, time taken=34 20201008_08:27:14.103947, pid=52516, sleep=0.0, time taken=34
所以问题是,为什么time.sleep()
会影响ZeroMQpoller.poll()
花费的时间?
代码是将苹果和橙子混合在一起:
time.time()
返回从纪元起的秒,即(time.time()-start)*1000
产生多少[ms]
毫秒的测试代码部分实际上拿走了。
而轮询器。poll()。POLLIN
-事件允许在任何较早的位置向前移动。
也就是说,您的度量方法不是探索。睡眠()
-方法,而是由外部进程随机获取的间隔,该进程向REQ
-side发送()
-s发送REP
-side答案。
还在怀疑中?将Hibernate时间设置为31[s]
,您应该会收到几乎为零的持续时间报告,从一个制定不当的本地时间括号(当然,当且仅当远程REP
说谎的实体在这样的操作期间没有窒息崩溃)。
您可能还喜欢zmq。Stopwatch
类,具有{.start(),.stop()}
-方法,为使用ZeroMQ本机[us]
-分辨率时钟提供智能工具。我在ZeroMQ performance上的大多数帖子都将其用于微基准标记。
2.17 响应时间(边缘) 2.17.1 描述 返回5分钟颗粒度的状态码明细数据,主要返回时间戳、省份、运营商、HIT/MISS、状态码、响应时间、请求数 2.17.2 请求地址 地址: https://api.bokecs.com/channel/responseTime?time={time}domain={domain} 2.17.3 请求方式 GET 2.17.4 请求参数 参数名称 是否
我正在为我的UI元素制作一个简单的动画。 我有一个动画组件,它有2个不同的动画-ZoomIn和ZoomOut。 每当需要在屏幕上显示UI元素(如按钮)时,就会显示这些动画。 我通常更喜欢在不显示时停用游戏对象。 我为动画编写了以下方法: 对于大多数屏幕,代码工作正常,但当我使用timescale=0暂停游戏时,代码显示问题。 当时间刻度为0时,线gameObj。SetActive(false)不工
我们使用API网关Lambda函数DynamoDB来获取数据,并使用DynamoDB查询方法。对于260.4KB的数据(项目总计数:675 |扫描计数:3327),需要3.49秒。 要求: 我们有4个客户,我们每天计算客户销售用户的数据,并将其存储在数据库中。 表结构: 主键:ClientId 排序键:日期UserId 其他属性:日期 在查询中-我们使用主键ClientId 目前,我们正在为Dyn
如图:右边红色的提示 怎么会这样呢?(头大~) 当父盒子背景色为白色时‘正常’,或者把select的i标签的过渡给取消也就‘正常’了 可利用下面代码测试
我的模拟模型中有在GIS空间漫游的代理。我建立了一个参数变化实验来产生复制。在运行期间,我收到了四条通知,“服务器没有响应。连接超时。”然而,模拟一直在运行,它仍然产生了结果。这个错误的影响是什么?为什么会这样? 我的路由是从开源地图服务器请求的,路由服务器选项是AnyLogic。
问题内容: 我正在研究ajax长期轮询,但感到困惑。传统的ajax调用和长时间轮询有什么不同 此示例仅以递归方式调用服务器。与setInterval中的传统调用不同。 问题答案: 顾名思义,“ 长时间轮询” 意味着长时间轮询某些内容。 这是实际过程的开始,您对服务器上的某个脚本进行ajax调用,在本例中为,您需要使服务器脚本(例如)足够智能,以便仅在所需数据可用时才响应请求,该脚本应等待指定的时间