Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo pausar un proceso en Python

Cómo pausar un proceso en Python

Quieres suspender el proceso, no bloquearlo

Si usas sleep(), el proceso se bloqueará

Suponiendo que hay dos subprocesos bajo el proceso, entonces ambos subprocesos se bloquearán. Continuar ejecutando

Para suspender el proceso, considere usar psutil

import psutil<

p = psutil.Process(pid)

p .suspend() #Suspender proceso

p.resume() #Reanudar proceso

Para demostración, escribí un proceso simple

, en el que hay dos Hilos: Lector y Escritor.

Escritor (problema simple de lector/escritor)

Proceso:

importar subprocesos

desde el momento importar ctime, dormir

importar ThreadInReadAndWriteProblem < / p>

importar multiprocesamiento

importar sistema operativo

clase Proceso(multiprocesamiento.Proceso):

def __init__(self):

multiprocessing.Process.__init__(self) # Implementar manualmente la clase principal

pid = os.getpid()

def run(self):

print 'Proceso actualmente en ejecución PID: %s ' %self.pid # La identificación del subproceso secundario es la misma que la identificación del pid del subproceso principal y pertenece al mismo proceso

para i en el rango (0 ,5):

r = ThreadInReadAndWriteProblem.Reader()

w = ThreadInReadAndWriteProblem.Writer()

w.start()

r.start()

imprimir 'Bloqueo de proceso'

sleep(10) #Total*** tiempo de ejecución 10 segundos

Lector y escritor

importar subprocesos

desde el momento importar ctime, dormir

importar os

mutex = threading.Lock() #Mutex lock

mutex_readercount = threading.Lock() #Bloqueo Mutex

mutex_readercount = threading.Lock() #Bloqueo Mutex

mutex_readercount = threading.Lock() #Bloqueo Mutex

mutex_readercount = threading.Lock()Lock() #exclusión mutua mientras se cuenta Cuente el número que se está leyendo actualmente

readerCount = 0 número = 0

#No satisfecho Ingrese al estado de bloqueo

clase Lector(threading.Thread): #lector

def __init__(self):

threading.Thread.__init__(self) #Heredar el constructor padre

def run(self):

exclusión mutua global

número de lectores global

#print 'PID del subproceso: %s ' %os.getpid ()

mientras que Verdadero:

mutex_readercount.acquire()

lectorCount +=1

si lectorCount == 1:

print 'Proceso del lector esperando, entumecido

er %s' %(self.name)

mutex.acquire() == False # Primero es necesario aplicar

mutex_readercount.release()

imprimir ' Empezando a leer, lector número %s, el tiempo es ahora %s' %(self.name, ctime())

sleep(2)

print 'Lectura terminada, lector número %s, el tiempo ahora es %s' %(self.name,ctime())

mutex_readercount.acquire()

lectorCount -= 1

if ReaderCount == 0: # Todos los lectores han terminado

print 'El último lector terminó de leer'

mutex.release()

mutex_readercount.release()

clase Escritor( threading.Thread): #writer

def __init__(self):

threading.Thread.__init__(self)

def ejecutar(self):

mutex global

escritor globalCount

#print 'PID del subproceso: %s' %os.getpid()

while True:

print 'Número de proceso de escritura en espera: %s' %(self.name)

mutex.acquire()

print 'Número inicial de escritura: %s Ahora el tiempo es: %s ' %(self.name,ctime())

sleep(5)

print 'Finalizando escritura Número: %s Ahora es el momento de %s' %(self.name,ctime())

mutex.release()

Programa de prueba

importar ThreadInReadAndWriteProblem

importar SingleProcessSchedulerMultiprocess

importar psutil

importar Programador

desde el momento importar ctime, dormir

def main( ):

p = SingleProcessSchedulerMultiprocess.start()

dormir(3)

detener(p.pid)

imprimir 'Proceso colgando %s' %ctime()

dormir(5)

despertar(p.pid)

imprimir 'Proceso de activación %s' %ctime() <

def stop(pid):

print 'proceso suspendido Número de proceso %s ' %

(pid)

p = psutil.Process(pid)

p.suspend()

def wake(pid):

print 'proceso reanudar Número de proceso %s ' %(pid)

p = psutil.Process(pid)

p.resume()

if __name__ = = '__main__':

main()

Resultados:

PID del proceso actualmente en ejecución: 3096

Proceso de escritura en espera No.Thread -2 Hora actual: lunes 30 de noviembre 21:12:12 2015

Número de espera del proceso de lectura Subproceso-1

Número de espera del proceso de escritura Subproceso-4

Proceso bloqueo

Número de espera del proceso del escritor Thread-6

Número de espera del proceso del Writer Thread-8

Número de espera del proceso del Writer Thread-10

Proceso Suspendido Proceso No.3096

Proceso suspendido Lun 30 Nov 21:12:15 2015

Proceso de recuperación proceso No. 3096

El proceso despierta Lun Nov 30 21:12:20 2015

Número de fin de escritura: Hilo -2 La hora actual es Lun 30 de noviembre 21:12:20 2015

El proceso de escritura espera Número: Hilo- 2Thread-2

Iniciando lectura, número de lector Thread-1, el tiempo ahora es el lunes 30 de noviembre 21:12:20 2015

Inicio de lectura, número de lector Thread-3, el tiempo ahora es Lun 30 de noviembre 21:12:20 2015

Comenzando a leer, número de lector Thread-5, ahora es el lunes 30 de noviembre 21:12:20 2015

Comenzó a leer, número de lector Thread -7, la hora actual es el lunes 30 de noviembre a las 21:12:20 2015

Comenzó a leer, número de lector Thread-9, la hora actual es el lunes 30 de noviembre a las 21:12:20 de 2015

Lectura terminada, lector número Hilo-1, la hora actual es lunes 30 de noviembre 21:12: 30 de noviembre de 2015 21:12:22

Lectura terminada, lector número Hilo-1 3. La hora actual es 21:12:22 del 30 de noviembre de 2015

La lectura está completa, el número de lector es Thread-5, la hora actual es 21:12:22 del 30 de noviembre de 2015

Lectura completada, el número de lector es Thread-7, la hora actual es 21:12:22, 30 de noviembre de 2015