Reputation: 1
AttributeError: Can't get attribute 'do_something' on <module '__mp_main__' from 'x.py'>
When I run my code I got this error message in the terminal. I've tried everything, I searched on Google and asked at AI answer generating websites and it still doesn't work.
This is my code:
import multiprocessing
import time
if __name__ == '__main__':
start = time.perf_counter()
def do_something():
print('Sleeping 1 second...')
time.sleep(1)
print('Done sleeping...')
p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)
p1.start()
p2.start()
# Call join() to wait for processes to finish running
p1.join()
p2.join()
finish = time.perf_counter()
print(f'Finished in {round(finish-start, 2)} second(s)')
The code is supposed to print:
Sleeping 1 second... Sleeping 1 second... Done sleeping... Done sleeping... Finished in 1 second(s)
Upvotes: 0
Views: 806
Reputation: 5744
The main guard if __name__ == '__main__':
was invoked too early.
So something like this works:
import time
import multiprocessing
def do_something():
print('Sleeping 1 second...')
time.sleep(1)
print('Done sleeping...')
start = time.perf_counter()
if __name__ == '__main__':
p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)
p1.start()
p2.start()
# Call join() to wait for processes to finish running
p1.join()
p2.join()
finish = time.perf_counter()
print(f'Finished in {round(finish-start, 2)} second(s)')
The result:
Sleeping 1 second...
Sleeping 1 second...
Done sleeping...
Done sleeping...
Finished in 2.6 second(s)
Link to the docs: https://docs.python.org/3/library/multiprocessing.html
Upvotes: 1