在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?