对于Python,可以通过设置属性daemon
来生成非守护程序线程。以下是daemon
:
一个布尔值,指示此线程是否为守护程序线程(True)或不是(False)。必须在调用start()之前设置它,否则引发RuntimeError。它的初始值继承自创建线程;主线程不是守护程序线程,因此在主线程中创建的所有线程都默认为daemon = False。
当没有剩下活着的非守护程序线程时,整个Python程序退出。
https://docs.python.org/2/library/threading.html#threading.Thread.daemon提供了更多详细信息。
我知道Python和Ruby都有方法join()
来等待线程终止。此外,在以下代码段中,程序将在线程a
完成时退出。
#!/usr/bin/env ruby
# coding: UTF-8
a = Thread.new() do
1000.times do |value|
puts "---" + value.to_s
end
end
while a.status != false
# do something
end
puts 'I am the main thread'
Ruby可以像Python一样生成非守护程序线程吗?
答案 0 :(得分:3)
Ruby Threads默认显示Python守护进程行为,但实际上没有这样的内置概念。
当主程序到达结束时,没有while
(或join
/ value
)的示例将退出。
要让线程采取Python非守护进程行为,您必须专门等待它们。
require 'thwait' #stdlib
wait_threads = []
wait_threads.push( Thread.new() do
1000.times do |value|
printf "%s ", value
end
end )
Thread.new() do
sleep 1
puts "I am like a python daemon"
end
ThreadsWait.all_waits( *wait_threads )
puts 'I am the main thread'