Eu tenho um script e quero que uma função seja executada ao mesmo tempo que a outra.
O código de exemplo que eu olhei:
import threading
def MyThread (threading.thread):
# doing something........
def MyThread2 (threading.thread):
# doing something........
MyThread().start()
MyThread2().start()
Estou tendo problemas para fazer isso funcionar. Eu preferiria fazer isso usando uma função de thread em vez de uma classe.
Este é o script de trabalho:
from threading import Thread
class myClass():
def help(self):
os.system('./ssh.py')
def nope(self):
a = [1,2,3,4,5,6,67,78]
for i in a:
print i
sleep(1)
if __name__ == "__main__":
Yep = myClass()
thread = Thread(target = Yep.help)
thread2 = Thread(target = Yep.nope)
thread.start()
thread2.start()
thread.join()
print 'Finished'
python
multithreading
chrissygormley
fonte
fonte
exiting
comoexciting
, o que achei mais apropriado de qualquer maneira.Existem alguns problemas com o seu código:
Se você realmente deseja fazer isso apenas com funções, tem duas opções:
Com rosqueamento:
Com rosca:
Doc para thread.start_new_thread
fonte
thread.start_new_thread(function, args[, kwargs])
Tentei adicionar outro join (), e parece que funcionou. Aqui está o código
fonte
Você pode usar o
target
argumento noThread
construtor para transmitir diretamente uma função que é chamada em vez derun
.fonte
Você substituiu o método run ()? Se você cancelou
__init__
, não se esqueça de ligar para a basethreading.Thread.__init__()
?Após iniciar os dois threads, o thread principal continua a funcionar indefinidamente / bloqueia / ingressa nos threads filhos, para que a execução do segmento principal não termine antes que os segmentos filhos concluam suas tarefas?
E, finalmente, você está recebendo alguma exceção não tratada?
fonte
__init__
. É necessário executar () então? Obrigadodef MyThread ( threading.thread )
... Supus que essas fossem definições de classe. Se você for subclassificar threading.thread e inicializar o objeto de encadeamento comtarget=None
ou omitir otarget
arg, será necessária uma implementação de run (). Caso contrário, se você quiser executar uma tarefa simples em outro segmento, consulte a resposta do jkp.O Python 3 tem a facilidade de iniciar tarefas paralelas . Isso facilita nosso trabalho.
Possui para pool de threads e pool de processos .
A seguir, é apresentado um insight:
Exemplo de ThreadPoolExecutor
Outro exemplo
fonte