我试图设置一个自动压力测试,并将随机生成的数据输入Redis,然后让消费者(作为从Redis读取的另一个组件)处理随机数据。
为了模拟随机生成的数据尽可能接近真实世界的计时,我决定将其放入一个无限循环中,并使用EventMachine来处理同步。我不确定我在用EventMachine做什么,但我听说它比不断生成新线程并阻塞主进程要好得多。我这样做对吗?
EventMachine.synchrony do
@redis = EM::Hiredis.connect
# hit Control + C to stop
Signal.trap("INT") { EventMachine.stop }
Signal.trap("TERM") { EventMachine.stop }
trip_id = 0
loop do
longitude, latitude = [0.0, 0.0]
for i in 0..100
# now loop
longitude, latitude = random_coordinates
sleep 0.05 # sleep a bit to simulate the real world
end
puts "this trip #{trip_id} | #{longitude} : #{latitude}"
trip_id += 1
redis.set('trip_id', trip_id)
end
end
编辑1
所以我最终用一个线程池来完成它
require "thread/pool"
require "json"
require "redis"
require 'thread_safe'
def publish_on_redis(hash)
@redis ||= Redis.new
@redis.publish("trips", hash.to_json)
end
# Using thread-safe data structure
@trip_id_list = ThreadSafe::Array.new()
TRIP.times {|n| @trip_id_list[n] = n}
@trip_id_list.shuffle!
pool = Thread.pool(TRIP)
loop do
@trip_id_list.each do |trip_id|
pool.process {
longitude, latitude = [0.0, 0.0]
# Everything has to be UTC timestamp, everyone is on the same timezone
start = Time.now.utc
while((Time.now.utc - start) < @total_duration)
longitude, latitude = random_coordinates_radius
publish_on_redis({:id => trip_id, :time => Time.now, :longitude => longitude, :latitude => latitude})
sleep 1 # sleep at each run some amount of times
end
publish_on_redis({:id => trip_id, :time => Time.now, :longitude => longitude, :latitude => latitude})
@trip_id_list.delete(trip_id)
}
end
break # will have to exit the infinite loop
end
pool.shutdown
像您在这里所做的那样生成随机事件似乎是正确的。
然而,您根本没有强调redis,您只是在做一个简单的“集合”,如果密钥存在,它将用新数据覆盖密钥。
我建议使用一个填充了大量数据的管道,您可以在测试块中等待它的执行(睡眠)。
将sleep语句移到数据准备代码之外。
希望这有帮助,TW
这个脚本应该以随机生成的延迟滚动浏览网站上的每个容器。对于循环中的每次迭代,我要将ms的“暂停”替换为一个在和秒之间随机生成的数字。 随机数生成器: 就像这样工作很好。在每次迭代之后,会有2秒的暂停。但是,当我移除注释以添加行以随机化每次迭代之间的时间时,值(它应该滚动到哪个容器)一开始很好,但后来也变成随机的。 控制台输出: 我该怎么解决这个?
我需要在eventmachine上有一个无限循环,它不断地读取redis队列。下面是我的代码。递归是正确的方法吗?我尝试了loop,但无法以那种方式工作。
问题内容: 我需要生成一个随机数。 看来该功能已不复存在。 我的选择是, 和 。 我在函数上找不到任何文档,头文件中也没有注释。 问题答案: ===== Swift 4.2 / Xcode 10 ===== 斯威夫特在引擎盖下用来完成工作。 ===== Swift 4.1 / Xcode 9 ===== 返回 0* 到 4294967295之间 的随机数 * 返回 0.0* 到 1.0 范围内的随
我不是只想用第一个数字来完成这个操作,而是使用while循环和if条件,使我在键盘上输入的任何内容都变成一个整数。 你觉得问题出在哪里?请帮帮我.
random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando
问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实