在Python中创build线程

我有一个脚本,我想要一个function与另一个同时运行。

我看过的示例代码:

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' 

你不需要使用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" 

在这里我展示了如何使用线程模块创build一个调用普通函数作为其目标的线程。 你可以看到我可以在线程构造函数中传递我需要的任何参数。

你的代码有几个问题:

 def MyThread ( threading.thread ): 
  • 你不能用一个函数子类化; 只有一个class级
  • 如果你打算使用一个子类,你想要threading.Thread,而不是threading.thread

如果你真的想用function来做到这一点,你有两个select:

使用线程:

 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 for thread.start_new_thread

我试图添加另一个连接(),它似乎工作。 这里是代码

 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() 

你可以在Thread构造函数中使用target参数来直接传递一个被调用而不是run的函数。

你重写了run()方法吗? 如果你重写了__init__ ,你确定调用了基础threading.Thread.__init__()

在启动两个线程后,主线程是否继续无限地工作/阻塞/join子线程,以便主线程执行不会在子线程完成其任务之前结束?

最后,你是否得到任何未处理的exception?