I have a script and I want one function to run at the same time as the other.
The example code I have looked at:
import threading def MyThread (threading.thread): # doing something........ def MyThread2 (threading.thread): # doing something........ MyThread().start() MyThread2().start()
I am having trouble getting this working. I would prefer to get this going using a threaded function rather than a class.
This is the working script:
from threading import Thread 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'
You don't need to use a subclass of
Thread to make this work - take a look at the simple example I'm posting below to see how:
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")
Here I show how to use the threading module to create a thread which invokes a normal function as its target. You can see how I can pass whatever arguments I need to it in the thread constructor.
There are a few problems with your code:
def MyThread ( threading.thread ):
If you really want to do this with only functions, you have two options:
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