Ruby atexit와 Parallel에서 이상한 일이 생겼어요.
at_이른바 exit
루비Kernel#at_exit에는 이런 방법이 있다.
루비 처리가 끝났을 때 추가로 수행할 수 있는 처리로, 사용법에 따라 매우 편리하게 사용할 수 있다.
(자세한 조사는 없었지만 여러 젬에서 사용한 것 같다)
Parallel 소개
Ruby에서 다중 프로세스/스레드 처리를 간단하게 사용할 수 있는 Gem입니다.
Ruby 병렬 처리 시 자주 사용하려고 합니다.
이번에 발생한 문제 at_exit
와 Parallel이 동시에 다중 프로세스 처리를 사용하면서 이상한 행동이 나타났다.
구체적으로 이런 느낌↓
test.rbat_exit do
puts "run at_exit!"
end
Parallel.each(1..4, in_processes: 4) do |num|
sleep num
puts "sleep done! #{num}"
end
이 파일을 실행한 결과↓$ ruby at_exit_and_multi_process_test.rb
sleep done! 1
run at_exit!
sleep done! 2
run at_exit!
sleep done! 3
run at_exit!
sleep done! 4
run at_exit!
run at_exit!
at_exit
5번 뛰었어!!
기본적으로 at_exit
를 사용할 때 마지막으로 한 번만 뛰면 안 된다고 생각해요.
나는 아마도 원인을 알아차릴 수 있을 것이라고 생각한다.at_exit
내의 처리는 루비의 처리가 끝날 때 걸려야 하는데 그'루비의 처리의 끝'은 각 서브 과정에서 발생했고 포크 부모 과정의 상태의 서브 과정에서도 마찬가지at_exit
의 처리가 도망갔다고 한다.(가능)
그리고 아버지 프로세스의 끝부분을 포함해 다섯 차례나 뛰었다.
참고로 다선정 처리에서 문제없이 동작을 하였는데, 결과는 다음과 같다↓$ ruby at_exit_and_multi_thread_test.rb
sleep done! 1
sleep done! 2
sleep done! 3
sleep done! 4
run at_exit!
아마 at_exit
와 파라엘을 동시에 사용하는 사람이 없을 거예요. 그래서 투덜거려도 별로 인기가 없어서 이 글을 썼어요.
곰곰이 생각해보면 다 알겠지만 특별한 의식 없이 그러다 보니 행동이 이상해졌으니 주의하세요
참고 자료
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/at_exit.html
https://techracho.bpsinc.jp/hachi8833/2018_05_22/56171
https://qiita.com/sekido-ts/items/5dc9c88d877bb2a1df0b
https://qiita.com/Kohei909Otsuka/items/26be74de803d195b37bd
Reference
이 문제에 관하여(Ruby atexit와 Parallel에서 이상한 일이 생겼어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ykogure/items/ff6ba297f69bfea10383
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Ruby에서 다중 프로세스/스레드 처리를 간단하게 사용할 수 있는 Gem입니다.
Ruby 병렬 처리 시 자주 사용하려고 합니다.
이번에 발생한 문제 at_exit
와 Parallel이 동시에 다중 프로세스 처리를 사용하면서 이상한 행동이 나타났다.
구체적으로 이런 느낌↓
test.rbat_exit do
puts "run at_exit!"
end
Parallel.each(1..4, in_processes: 4) do |num|
sleep num
puts "sleep done! #{num}"
end
이 파일을 실행한 결과↓$ ruby at_exit_and_multi_process_test.rb
sleep done! 1
run at_exit!
sleep done! 2
run at_exit!
sleep done! 3
run at_exit!
sleep done! 4
run at_exit!
run at_exit!
at_exit
5번 뛰었어!!
기본적으로 at_exit
를 사용할 때 마지막으로 한 번만 뛰면 안 된다고 생각해요.
나는 아마도 원인을 알아차릴 수 있을 것이라고 생각한다.at_exit
내의 처리는 루비의 처리가 끝날 때 걸려야 하는데 그'루비의 처리의 끝'은 각 서브 과정에서 발생했고 포크 부모 과정의 상태의 서브 과정에서도 마찬가지at_exit
의 처리가 도망갔다고 한다.(가능)
그리고 아버지 프로세스의 끝부분을 포함해 다섯 차례나 뛰었다.
참고로 다선정 처리에서 문제없이 동작을 하였는데, 결과는 다음과 같다↓$ ruby at_exit_and_multi_thread_test.rb
sleep done! 1
sleep done! 2
sleep done! 3
sleep done! 4
run at_exit!
아마 at_exit
와 파라엘을 동시에 사용하는 사람이 없을 거예요. 그래서 투덜거려도 별로 인기가 없어서 이 글을 썼어요.
곰곰이 생각해보면 다 알겠지만 특별한 의식 없이 그러다 보니 행동이 이상해졌으니 주의하세요
참고 자료
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/at_exit.html
https://techracho.bpsinc.jp/hachi8833/2018_05_22/56171
https://qiita.com/sekido-ts/items/5dc9c88d877bb2a1df0b
https://qiita.com/Kohei909Otsuka/items/26be74de803d195b37bd
Reference
이 문제에 관하여(Ruby atexit와 Parallel에서 이상한 일이 생겼어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ykogure/items/ff6ba297f69bfea10383
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
at_exit do
puts "run at_exit!"
end
Parallel.each(1..4, in_processes: 4) do |num|
sleep num
puts "sleep done! #{num}"
end
$ ruby at_exit_and_multi_process_test.rb
sleep done! 1
run at_exit!
sleep done! 2
run at_exit!
sleep done! 3
run at_exit!
sleep done! 4
run at_exit!
run at_exit!
$ ruby at_exit_and_multi_thread_test.rb
sleep done! 1
sleep done! 2
sleep done! 3
sleep done! 4
run at_exit!
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/at_exit.html
https://techracho.bpsinc.jp/hachi8833/2018_05_22/56171
https://qiita.com/sekido-ts/items/5dc9c88d877bb2a1df0b
https://qiita.com/Kohei909Otsuka/items/26be74de803d195b37bd
Reference
이 문제에 관하여(Ruby atexit와 Parallel에서 이상한 일이 생겼어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ykogure/items/ff6ba297f69bfea10383텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)