Cómo pausar un proceso en Python
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: p>
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