In Python, we have multiple ways of creating process pools for the distribution of the tasks. We can create these pools manually—as shown in the example in the Synchronization of processes section in this chapter—or we can utilize the provided ProcessPoolExecutor from the concurrent.futures library.