2010-09-14 1 views
3

Я планирую сделать многолетний фоновый процесс с Python, но я до сих пор не уверен, использовать ли os.spawnle или поток. Я только читал об этом, поэтому у меня не так много опыта ни с порождением, ни с потоком. Есть ли какое-либо эмпирическое правило, когда его использовать?Python: создать или нить для продолжения фонового процесса?

Благодаря осыпает

+0

Как долго это будет работать? Может быть, это демон? – Falmarri

+0

Да, демон может быть хорошим вариантом. Но если я хочу развить процесс, возможно ли это с демоном? –

ответ

4

Обязательно учитывайте Global Interpreter Lock. Если длительный рабочий процесс имеет интенсивность процессора, вы, вероятно, должны сделать его независимым процессом. Если, с другой стороны, он собирается потратить много времени на блокировку, тогда GIL на самом деле не такой большой сделки, и вы должны быть в порядке, чтобы сделать его нитью.

Кроме того, если вам не нужно что-то особенное, что предлагает os.spawnle, рассмотрите возможность использования пакета multiprocessing из стандартной библиотеки. Он обеспечивает интерфейс, аналогичный интерфейсу пакета threading, и он в целом более прост в использовании, чем обманывание с процессами нереста и отслеживания вручную.

+0

Никогда не думал о модуле «многопроцессорности». Спасибо что подметил это. –

2

Очевидная разница в том, что os.spawnle используется для запуска другого процесса, протекающего в другой программы, в то время как поток будет выполнение кода, который является частью одной и тех же программ. Фактически, если ваш фоновый процесс - это какая-то другая программа, которая уже существует, то os.spawnle (или некоторые другие способы создания отдельного процесса) - ваш единственный вариант; два потока в программе должны работать с одной и той же программой.

Если вам интересно, следует ли создавать собственный код для запуска как отдельные процессы или как отдельные потоки, а затем взгляните на некоторые из process v. thread questions like this one, чтобы решить, что лучше подходит для того, что вы пытаетесь сделать. В частности, рассмотрите, какие ресурсы должны обрабатывать процессы/потоки, что они будут связывать друг с другом, и насколько они должны быть надежными - поток, который выходит из строя, приведет к остальному процессу с ним, например.