Rodar thread em background em python - [ÁLGEBRA - MATRIZES ] [RESOLVIDO]

1. Rodar thread em background em python - [ÁLGEBRA - MATRIZES ] [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 08/09/2017 - 08:08h

Bom dia,

tenho um código que necessita rodar uma thread, tal que faz outra função dentro do programa principal.

O programa principal é cálculo de sequências amostrais, matrizes etc.
estou usando esse esboço:

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

import threading, time
from time import sleep
import sys, os

def worker(wait):
for i in range(60):
print wait
time.sleep(60)

t = threading.Thread(target=worker,args=())
thread.daemon = True
t.start()

while t.isAlive():
os.system("python algebra.py --matrizes")
time.sleep(60)

def main(tarefas):
if tarefas:
for num, tarefa in enumerate(tarefas):
print('\nRotina {}: {}'.format(num, tarefa))
sleep(1.6)

if __name__ == '__main__':

worker(wait)
main()


onde eu puxo do os.system o script principal pra rodar essa o programa principal.

Existem métodos mais sofisticados para isso, certo?

No caso, eu necessito que a thread esteja no script principal, onde serão feitos os cálculos em background, retornar os resultados e voltar pra thread. Assim por diante

Alguém com alguma luz pra me ajudar?



  


2. Re: Rodar thread em background em python - [ÁLGEBRA - MATRIZES ] [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 08/09/2017 - 12:53h

UP


3. Re: Rodar thread em background em python - [ÁLGEBRA - MATRIZES ] [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 08/09/2017 - 20:27h

Observe este exemplo:
#!/usr/bin/env python3

from threading import Thread
from random import random
from time import sleep


class Worker(Thread):
def __init__(self):
Thread.__init__(self)

def run(self):
while True:
print("I'm {} running in background.".format(self.name))
sleep(random())

if __name__ == '__main__':
print("Starting threads")
for number in range(3):
thread = Worker()
thread.setName("thread {}".format(number))
thread.start()


Veja que a classe "Worker" é herdeira de "Thread", então ela também herda a função "run" que é sobreposta com o código que você deseja que seja executado em background.

Para entender melhor como funciona uma thread, pense assim. Toda vez que você faz:
instancia = treading.Thread(target=função)
instancia.start()


Está fazendo quase como no exemplo que deixei acima. No meu exemplo o loop inicia três threads que somente imprimem seus nomes na tela e nada mais.

Se você colocar algo abaixo desse loop o programa iniciará as threads e continuará fazendo oque estiver abaixo do loop. As threads continuam vivas enquanto a atividade principal que as criou também continua viva, ou se você as deu um tempo de vida condicional. Então se quiser matá-las somente digite Ctrl+C e boa.

Sou bom em aprender mas para explicar sou péssimo.


______________________________________________________________________
OS: Biebian
Kernel: x86_64 3.5.2-amd64
Resolution: 1320x768
CPU: Intel Core i3-4005U CPU @ 1.7GHz
RAM: 3852MiB
Distro: http://biebian.sourceforge.net/


4. Re: Rodar thread em background em python - [ÁLGEBRA - MATRIZES ] [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 09/09/2017 - 22:52h

bom... não entendi direito tua explicação. Sobre threads eu já sei.

Eu só preciso que o programa mantenha uma rotina, e que cada rotina seja uma entrada diferente. OU acesse um arquivo diferente.


5. Re: Rodar thread em background em python - [ÁLGEBRA - MATRIZES ] [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 10/09/2017 - 01:11h

estou com o seguinte código:


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from threading import Thread
from random import random
from time import sleep
import time

class Worker(Thread):
def __init__(self):
Thread.__init__(self)

def run(self):
#while True:


for i in range(2):

s = input()
items = s.split(',') # Extracts items from the string
list = [ eval(x) for x in items ] # Convert items to numbers
matrix.append(list)



pass


#def matrix(m, column):
# total = 0

for row in range(len(m)):

total += m[row][column]
return total

#a= input("\nA: ")

#a1 = input("\na: ")

# try:
# print("\nMatrix A\n")
#/ print(column)
print("\n")
# print("\nMatrix B\n")
# print("")
#/ print("\n")

# except:
# None

if __name__ == '__main__':
for number in range(3):
thr = Worker()
thr.setName("thread {}".format(number))
thr.start()


retorna o seguinte erro

AttributeError: 'int' object has no attribute 'split'

há como me ajudar?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts