Типичным действием в этом случае является создание входной очереди. Задайте очередь и поместите в нее задачи, а также создайте несколько рабочих, которые будут брать задачи из очереди. Если вам нужно ограничить число работников, которые могут получить доступ к ресурсам, одновременно используйте многопоточность. Семафор или многопоточность. Блокировка Надеюсь, что ответ будет вам полезен, не стесняйтесь задавать вопросы.
import threading as thr
from queue import Queue
def work(input_q):
"""the function take task from input_q and print or return with some code changes (if you want)"""
while True:
item = input_q.get()
if item == "STOP":
break
# else do some work here
print("some result")
if __name__ == "__main__":
input_q = Queue()
urls = [...]
threads_number = 8 # experiment with the number of workers
workers = [thr.Thread(target=work, args=(input_q,),) for i in range(threads_number)]
# start workers here
for w in workers:
w.start
# start delivering tasks to workers
for task in urls:
input_q.put(task)
# "poison pillow" for all workers to stop them:
for i in range(threads_number):
input_q.put("STOP")
# join all workers to main thread here:
for w in workers:
w.join
# show that main thread can continue
print("Job is done.")