web-dev-qa-db-fra.com

Python: le thread est toujours en cours d'exécution

Comment voir si un fil est terminé? J'ai essayé ce qui suit, mais threads_list ne contient pas le fil qui a été démarré, même si je sais que le fil est toujours en cours d'exécution.

import thread
import threading

id1 = thread.start_new_thread(my_function, ())
#wait some time
threads_list = threading.enumerate()
# Want to know if my_function() that was called by thread id1 has returned 

def my_function()
    #do stuff
    return
11
user984003

La clé est de démarrer le thread en utilisant thread, pas thread:

t1 = threading.Thread(target=my_function, args=())
t1.start()

Puis utiliser

z = t1.isAlive()

ou

l = threading.enumerate()

Vous pouvez également utiliser join ():

t1 = threading.Thread(target=my_function, args=())
t1.start()
t1.join()
# Will only get to here once t1 has returned.
23
user984003

Ceci est mon code, ce n'est pas exactement ce que vous avez demandé, mais vous le trouverez peut-être utile

import time
import logging
import threading

def isTreadAlive():
  for t in threads:
    if t.isAlive():
      return 1
  return 0


# main loop for all object in Array 

threads = []

logging.info('**************START**************')

for object in Array:
  t= threading.Thread(target=my_function,args=(object,))
  threads.append(t)
  t.start()

flag =1
while (flag):
  time.sleep(0.5)
  flag = isTreadAlive()

logging.info('**************END**************')
0
Noam Rones