Вот еще один вариант с использованием планировщика ввода-вывода GIO (я никогда не использовал его раньше из Python, но пример ниже, похоже, работает нормально).
from gi.repository import GLib, Gio, GObject
import time
def slow_stuff(job, cancellable, user_data):
print "Slow!"
for i in xrange(5):
print "doing slow stuff..."
time.sleep(0.5)
print "finished doing slow stuff!"
return False # job completed
def main():
GObject.threads_init()
print "Starting..."
Gio.io_scheduler_push_job(slow_stuff, None, GLib.PRIORITY_DEFAULT, None)
print "It's running async..."
GLib.idle_add(ui_stuff)
GLib.MainLoop().run()
def ui_stuff():
print "This is the UI doing stuff..."
time.sleep(1)
return True
if __name__ == '__main__':
main()
/etc/init.d скрипты - это старый способ делать вещи. Они исходят из стандарта System V. Тем не менее, эти сценарии запускаются только в определенной последовательности, поэтому невозможно установить реальные зависимости.
Следовательно, выскочка была разработана с намерением заменить все скрипты /etc/init.d выскоченными скриптами (в [ f3]).
service позволяет плавный переход от скриптов /etc/init.d к сценариям выскочки. В будущем, когда все больше и больше скриптов будут перенесены на выскочку, обслуживание будет по-прежнему работать, потому что оно находит обе возможности.
Как включить или отключить службы?Также проверьте справочную страницу для служебной команды: man service
service запускает скрипт в предсказуемой среде (рабочий каталог есть и только 2 переменные среды установлены: LANG и TERM) , Он также добавляет возможность делать --full-restart. Итак, чтобы подвести итог:
service может запускать скрипты из / etc / init или /etc/init.d (upstart или System V) service запускает скрипты в предсказуемой среде.Аспект «предсказуемой среды» может вызвать проблемы, если по какой-либо причине ваш сценарий зависит от переменной среды. Вероятно, есть способ обойти это, но я не знаю, что это такое, и это выходит за рамки этого вопроса:)