gpt4 book ai didi

ruby - 在 ruby​​ 中使用中断和继续信号

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:48 25 4
gpt4 key购买 nike

我有这个程序,它通过 API 将照片上传到数据库。但是,处理和上传所有这些图像需要相当长的时间,我希望能够随机停止和恢复该过程。我认为中断和继续信号可能是很好的(临时的!)解决方案。

def upload
photos.each do |photo| # photos is an array of all photos.
api_client.upload_photos(photo.to_h)
end
end

def to_h
# Returns an hash of photos with an id and photo url
# { id: 123, url: "http://www.example.com/img/1"
end

我该怎么做?

最佳答案

您无需在 Ruby 中执行任何操作即可发送 SIGTSTP 和 SIGCONT 信号。

要停止正在运行的进程,只需点击 Control+Z:

$ ruby -e "loop { puts Time.now; sleep 1}"
2013-09-11 12:37:47 +0200
2013-09-11 12:37:48 +0200
2013-09-11 12:37:49 +0200
2013-09-11 12:37:50 +0200
2013-09-11 12:37:51 +0200
^Z
[1] + 13764 suspended (signal) ruby -e "loop { puts Time.now; sleep 1}"
$

要继续使用 fg 命令:

$ fg
[1] + 13764 continued ruby -e "loop { puts Time.now; sleep 1}"
2013-09-11 12:38:28 +0200
2013-09-11 12:38:29 +0200
2013-09-11 12:38:30 +0200
2013-09-11 12:38:31 +0200

参见 http://en.wikipedia.org/wiki/Job_control_(Unix)了解详情。

更新

在 Ruby 中处理这个信号:

trap("TSTP") {
# clean up
Process.kill("STOP", Process.pid) # really stop this process
}
trap("CONT") {
# handle restart
}

关于ruby - 在 ruby​​ 中使用中断和继续信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18738627/

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