gpt4 book ai didi

ruby - 使用 EventMachine 设置无限循环以生成随机数据

转载 作者:可可西里 更新时间:2023-11-01 11:42:45 26 4
gpt4 key购买 nike

我正在尝试设置一个自动压力测试,并将随机生成的数据输入 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 施加压力,您只是在做一个简单的“设置”,如果新数据存在,它将用新数据覆盖该键。

我建议使用你填充大量数据的管道,你在测试 block 中执行+等待(休眠)。

将 sleep 语句移到数据准备代码之外。

希望这有帮助,TW

关于ruby - 使用 EventMachine 设置无限循环以生成随机数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com