Создание потоков в 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'
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