Создание потоков в python



у меня есть скрипт, и я хочу, чтобы одна функция выполнялась одновременно с другой.



пример кода я посмотрел:



import threading


def MyThread ( threading.thread ):

doing something........

def MyThread2 ( threading.thread ):

doing something........

MyThread().start()
MyThread2().start()


у меня возникли проблемы с получением этой работы. Я бы предпочел, чтобы это происходило с помощью потоковой функции, а не класса.



Спасибо за любую помощь.



это рабочий скрипт, Спасибо за помощь.



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'
430   5  

5 ответов:

вам не нужно использовать подкласс Thread чтобы сделать эту работу-взгляните на простой пример, который я публикую ниже, чтобы увидеть, как:

from threading import Thread
from time import sleep

def threaded_function(arg):
    for i in range(arg):
        print "running"
        sleep(1)


if __name__ == "__main__":
    thread = Thread(target = threaded_function, args = (10, ))
    thread.start()
    thread.join()
    print "thread finished...exiting"

здесь я покажу, как использовать модуль threading для создания потока, который вызывает нормальную функцию в качестве своей цели. Вы можете видеть, как я могу передать любые аргументы, которые мне нужны, в конструкторе потока.

есть несколько проблем с вашим кодом:

def MyThread ( threading.thread ):
  • вы не можете подкласс с функцией; только класс
  • если бы вы собирались использовать подкласс, вы бы хотели резьбы.Нить, а не резьба.нить

Если вы действительно хотите сделать это с только функции, у вас есть два варианта:

С продевать нитку:

import threading
def MyThread1():
    pass
def MyThread2():
    pass

t1 = threading.Thread(target=MyThread1, args=[])
t2 = threading.Thread(target=MyThread2, args=[])
t1.start()
t2.start()

С резьбой:

import thread
def MyThread1():
    pass
def MyThread2():
    pass

thread.start_new_thread(MyThread1, ())
thread.start_new_thread(MyThread2, ())

Doc для нить.start_new_thread

Я попытался добавить еще один join (), и это, кажется, сработало. Вот код

from threading import Thread
from time import sleep

def function01(arg,name):
for i in range(arg):
    print(name,'i---->',i,'\n')
    print (name,"arg---->",arg,'\n')
    sleep(1)


def test01():
    thread1 = Thread(target = function01, args = (10,'thread1', ))
    thread1.start()
    thread2 = Thread(target = function01, args = (10,'thread2', ))
    thread2.start()
    thread1.join()
    thread2.join()
    print ("thread finished...exiting")



test01()

можно использовать

вы переопределили метод run ()? Если вы переопределили __init__, вы не забыли позвонить на базу threading.Thread.__init__()?

после запуска двух потоков основной поток продолжает работать бесконечно / блокировать / присоединяться к дочерним потокам, чтобы выполнение основного потока не заканчивалось до того, как дочерние потоки завершат свои задачи?

и, наконец, вы получаете все необработанные исключения?

Comments

    Ничего не найдено.