I would suggest that in this case, the lightweight thread would be better. When I ran the request on a certain URL 5 times, the result was:
Threads: Finished in 0.24 second(s) MultiProcess: Finished in 0.77 second(s)
Your implementation can be something like this:
import concurrent.futures import requests from bs4 import BeautifulSoup import time def access_url(url,No): print(f"{No}:==> {url}") response=requests.get(url) soup=BeautifulSoup(response.text,features='lxml') return ("{} : {}".format(No, str(soup.title)[7:50])) if __name__ == "__main__": test_url="http://bla bla.com/" base_url=test_url THREAD_MULTI_PROCESSING= True start = time.perf_counter() # calculate the time url_list=[base_url for i in range(5)] # setting parameter for function as a list so map can be used. url_counter=[i for i in range(5)] # setting parameter for function as a list so map can be used. if THREAD_MULTI_PROCESSING: with concurrent.futures.ThreadPoolExecutor() as executor: # In this case thread would be better results = executor.map(access_url,url_list,url_counter) for result in results: print(result) end = time.perf_counter() # calculate finish time print(f'Threads: Finished in {round(end - start,2)} second(s)') start = time.perf_counter() PROCESS_MULTI_PROCESSING=True if PROCESS_MULTI_PROCESSING: with concurrent.futures.ProcessPoolExecutor() as executor: results = executor.map(access_url,url_list,url_counter) for result in results: print(result) end = time.perf_counter() print(f'Threads: Finished in {round(end - start,2)} second(s)')
I think you will see better performance in your case.