


How to distribute work to a set of worker threads in Python?
To distribute work among a bunch of worker threads, use the concurrent.futures module, specifically ThreadPoolExecutor class.
With this alternative, you can manually write your own logic if you want fine control over the scheduling algorithm. Use the queue module to create a queue containing a list of jobs. The Queue class maintains a list of objects and has a .put(obj) method that adds items to the queue and a .get() method that returns an item. This class will take care of the necessary locking to ensure that each job is only distributed once.
Example
The following is an example -
import threading, queue, time # The worker thread gets jobs off the queue. When the queue is empty, it # assumes there will be no more work and exits. def worker(): print('Running worker') time.sleep(0.1) while True: try: arg = q.get(block=False) except queue.Empty: print('Worker', threading.current_thread(), end=' ') print('queue empty') break else: print('Worker', threading.current_thread(), end=' ') print('running with argument', arg) time.sleep(0.5) # Create a queue q = queue.Queue() # Start a pool of 5 workers for i in range(5): t = threading.Thread(target=worker, name='worker %i' % (i+1)) t.start() # Begin adding work to the queue for i in range(50): q.put(i) # Give threads time to run print('Main thread sleeping') time.sleep(5)
Output
Running worker Running worker Running worker Running worker Running worker Main thread sleeping Worker running with argument 0 Worker running with argument 1 Worker running with argument 2 Worker running with argument 3 Worker running with argument 4 Worker running with argument 5 Worker running with argument 6 Worker running with argument 7 Worker running with argument 8 Worker running with argument 9 Worker running with argument 10 Worker running with argument 11 Worker running with argument 12 Worker running with argument 13 Worker running with argument 14 Worker running with argument 15 Worker running with argument 16 Worker running with argument 17 Worker running with argument 18 Worker running with argument 19 Worker running with argument 20 Worker running with argument 21 Worker running with argument 22 Worker running with argument 23 Worker running with argument 24 Worker running with argument 25 Worker running with argument 26 Worker running with argument 28 Worker running with argument 29 Worker running with argument 27 Worker running with argument 30 Worker running with argument 31 Worker running with argument 32 Worker running with argument 33 Worker running with argument 34 Worker running with argument 35 Worker running with argument 36 Worker running with argument 37 Worker running with argument 38 Worker running with argument 39 Worker running with argument 40 Worker running with argument 41 Worker running with argument 42 Worker running with argument 43 Worker running with argument 44 Worker running with argument 45 Worker running with argument 46 Worker running with argument 47 Worker running with argument 48 Worker running with argument 49 Worker queue empty Worker queue empty Worker queue empty Worker queue empty Worker queue empty
The above is the detailed content of How to distribute work to a set of worker threads in Python?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

How to avoid being detected when using FiddlerEverywhere for man-in-the-middle readings When you use FiddlerEverywhere...

How to teach computer novice programming basics within 10 hours? If you only have 10 hours to teach computer novice some programming knowledge, what would you choose to teach...

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

How does Uvicorn continuously listen for HTTP requests? Uvicorn is a lightweight web server based on ASGI. One of its core functions is to listen for HTTP requests and proceed...

Fastapi ...

Using python in Linux terminal...

Understanding the anti-crawling strategy of Investing.com Many people often try to crawl news data from Investing.com (https://cn.investing.com/news/latest-news)...
