Ir para conteúdo
Fórum Script Brasil
  • 0

Rodar script em background (Thread)


BugsBunny

Pergunta

Olá,

eu tenho o seguinte script

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os

def RunSSHKeys():
        return os.system("sudo /usr/sbin/ltsp-update-sshkeys")
def RunImage():
        return os.system('sudo /usr/sbin/ltsp-update-image 1>img.txt &')

def Porcentagem():
  
    if os.path.exists('img.txt')==True:
        a=open('img.txt','r')
        linha='j'
        pct=0.0
        valor=''
        while linha !='':
            linha= a.readline()
            if len(linha) >1:
            valor=linha.split()[-1:][0].replace('%','')
        a.close()
        try:
            pct=float(valor)
            
        except ValueError:
              pass
        if pct ==100:
            os.system("rm img.txt")

        return pct
    else:
        a=open('img.txt','w')
        a.close()
        return 0

Como posso fazer com que seja criada uma thread para que a função RunImage() seja rodada no background e que essa nova thread seja independente seo processo pai termine?Acho que seria o caso de criar um novo processo e não uma thread..mas não sei fazer nenhum dos dois em python.

Se alguém puder ajudar, eu agradeço.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Como posso fazer com que seja criada uma thread para que a função RunImage() seja rodada no background e que essa nova thread seja independente seo processo pai termine?Acho que seria o caso de criar um novo processo e não uma thread..mas não sei fazer nenhum dos dois em python.

Veja se isto esclarece alguma coisa

http://www.wellho.net/solutions/python-pyt...st-example.html

http://www.inerciasensorial.com.br/2005/10...read-em-python/

http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf

http://docs.python.org/library/thread.html

http://medeubranco.wordpress.com/2008/07/1...eads-em-python/

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Jhonas..

Eu consegui fazendo assim:

from threading import Thread
def RunSSHKeys():
    os.system("sudo /usr/sbin/ltsp-update-sshkeys")

def aux():
     os.system('sudo /usr/sbin/ltsp-update-image 1>img.txt &')

def RunImage():
      

      th=Thread( target=aux() )
      th.start()
e assim também
import os, sys
import commands
def RunSSHKeys():
        a= os.system("sudo /usr/sbin/ltsp-update-sshkeys")
def RunImage():
    pid = os.fork()         # Create child
    if pid == 0:
    # Child process
        os.system('sudo /usr/sbin/ltsp-update-image 1>img.txt &')
        sys.exit()
    else:
        return 0

qual dos dois é mais seguro e rapido?

Me parece que a thread compartilha espaço com a thread pai e isso pode ser ruim na parte de segurança e que dando um fork() eu crio um processo independente do processo pai..não é??

Desde já muito obrigado velinho

Link para o comentário
Compartilhar em outros sites

  • 0
qual dos dois é mais seguro e rapido?

Me parece que a thread compartilha espaço com a thread pai e isso pode ser ruim na parte de segurança e que dando um fork() eu crio um processo independente do processo pai..não é??

Sim ... e voce pode fazer uma comparação com o códico abaixo

if you pull out the basic script code being executed in subprocess:

if 1:
        import sys, os, time, threading

        # a thread, which waits for the main program to terminate
        def joiningfunc(mainthread):
            mainthread.join()
            print('end of thread')
    
if 1:
    main_thread = threading.current_thread()
    def worker():
        childpid = os.fork()
        if childpid != 0:
            os.waitpid(childpid, 0)
            sys.exit(0)

        t = threading.Thread(target=joiningfunc,
                             args=(main_thread,))
        print('starting worker')
        t.start()
        print('joining worker')
        t.join() # Should not block: main_thread is already stopped

    w = threading.Thread(target=worker)
    w.start()

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Como que posso fazer com que duas threads compartilhem uma variável ou retornem um valor para a outra quando acabar sua execução?

Por exemplo..a thread principal cria um processo ou thread e espera até que este filho acabe seu serviço..e então o processo principal lé uma valor de variável que o processo ou thread filho deu um valor..

Desde já muito obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...