我正在寻找一个解决方案,在一个单独的进程中生成一个块或Proc中定义的代码。 像
这样的东西p = Proc.new do
File.open('newproc.log', 'w') {
|fw|
10.times do
fw.puts Time.now
sleep 1
end
}
end
# spawn p in a separate process here
# original code continues
没有进程分叉,没有线程,没有存储在外部文件中。只需在独立进程中执行该块。
有什么想法吗?
更新 我要添加块不依赖于调用过程中定义的任何内容。
答案 0 :(得分:2)
在基于Unix的系统上,fork(3)
是创建新进程的唯一方法。你必须能够分叉才能完成你所描述的内容。
如果你因为父进程“胖”并且占用大量内存而试图避免分叉,那么你可以通过使用Ruby的一个版本(例如Ruby 2.0)来避免重复内存。实现Copy-on-Write。并且线程比单独的进程使用更少的内存,因此线程当然值得考虑。
修改强>
使用fork
的解决方案可能如下所示:
p = Proc.new do
File.open('newproc.log', 'w') {
|fw|
10.times do
fw.puts Time.now
sleep 1
end
}
end
# spawn p in a separate process here
fork { p.call }
# original code continues