我正在使用 Julia v0.4.5,并使用这个简单的 julia 脚本从 redis channel 订阅:
using Redis
subHandler(x) = print(x)
errHandler(err) = print(err)
redisConn = RedisConnection(host="127.0.0.1", port=6379, db=0)
flushall(redisConn)
subConn = open_subscription(redisConn, errHandler)
subscribe(subConn, "julia-channel", subHandler)
如果我在 Julia repl 中逐行输入此脚本,它会按预期工作。
但是,如果我将此代码放入脚本文件并从 shell 运行:
julia sub.jl
Julia 在几秒钟内退出,没有打印任何内容..
也许我应该将订阅放入某种线程或循环中(以保持 Julia 运行)?
最佳答案
受到 FGFW 和 DanielArndt 的启发,我刚刚找到了答案。
简而言之,在 subscribe() 之后,添加以下代码以保持 Julia 运行:
while (true)
sleep(1)
end
说明:
根据 redis.jl 自述文件, subscribe() 生成一个后台例程来处理服务器发布事件。然而,在脚本模式下,julia 主线程(例程)在 subscribe() 之后退出,因此后台例程也被终止。 while - sleep 循环阻止主循环退出。
Repl 维护用户交互循环,因此我们不必手动循环。
关于Redis 在 julia 脚本中订阅不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592752/