Search notes:

Python standard library: concurrent.futures

ThreadPoolExecutor

#!/usr/bin/env python3

from concurrent.futures import ThreadPoolExecutor
import time
import random

items = [1, 2, 3, 4, 5, 6, 7, 8]

def f(item):

    r = random.uniform(0.05, 0.50)

    print(' ' * item + 'S')  # Start
    for i in range(5):   
          print(' ' * item + '.')
          time.sleep(r)

    print(' ' * item + 'F')  # Finished
    


with ThreadPoolExecutor(max_workers=3) as executor:
     executor.map(f, items)
Almost the same thing, but using a slow item generator. It turns out that the concurrent execution starts as soon as an item is available:
from concurrent.futures import ThreadPoolExecutor
import time
import random

def slow_item_generator():

    for i in range(16):
        yield i
        time.sleep(1)


def f(item):

    r = random.uniform(0.05, 0.50)

    print(' ' * item + 'S')  # Start
    for i in range(5):   
          print(' ' * item + '.')
          time.sleep(r)

    print(' ' * item + 'F')  # Finished
    

with ThreadPoolExecutor(max_workers=3) as executor:
     executor.map(f, slow_item_generator())

See also

asyncio
standard library

Index

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php:78 Stack trace: #0 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(78): PDOStatement->execute(Array) #1 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(30): insert_webrequest_('/notes/developm...', 1759390408, '216.73.216.42', 'Mozilla/5.0 App...', NULL) #2 /home/httpd/vhosts/renenyffenegger.ch/httpsdocs/notes/development/languages/Python/standard-library/concurrent/futures/index(91): insert_webrequest() #3 {main} thrown in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php on line 78