Make 2 functions run at the same time Make 2 functions run at the same time python python

Make 2 functions run at the same time


Do this:

from threading import Threaddef func1():    print('Working')def func2():    print("Working")if __name__ == '__main__':    Thread(target = func1).start()    Thread(target = func2).start()


The answer about threading is good, but you need to be a bit more specific about what you want to do.

If you have two functions that both use a lot of CPU, threading (in CPython) will probably get you nowhere. Then you might want to have a look at the multiprocessing module or possibly you might want to use jython/IronPython.

If CPU-bound performance is the reason, you could even implement things in (non-threaded) C and get a much bigger speedup than doing two parallel things in python.

Without more information, it isn't easy to come up with a good answer.


This can be done elegantly with Ray, a system that allows you to easily parallelize and distribute your Python code.

To parallelize your example, you'd need to define your functions with the @ray.remote decorator, and then invoke them with .remote.

import rayray.init()# Define functions you want to execute in parallel using # the ray.remote decorator.@ray.remotedef func1():    print("Working")@ray.remotedef func2():    print("Working")# Execute func1 and func2 in parallel.ray.get([func1.remote(), func2.remote()])

If func1() and func2() return results, you need to rewrite the above code a bit, by replacing ray.get([func1.remote(), func2.remote()]) with:

ret_id1 = func1.remote()ret_id2 = func1.remote()ret1, ret2 = ray.get([ret_id1, ret_id2])

There are a number of advantages of using Ray over the multiprocessing module or using multithreading. In particular, the same code will run on a single machine as well as on a cluster of machines.

For more advantages of Ray see this related post.