Threads in Python 3

Feb 7, 2016 16:20

When writing programs, we often need a way to do multiple things simultaneously. An example of this is a web browser; if a page is taking forever to load, then users might open another tab and browse while they're waiting.

Threading is kind of like juggling:

juggling

where each ball is like a thread.

Python Code

Below is a program that creates two threads that count, starting at zero. We start the second counter a second after the first one starts.

import threading
import time


class Counter:
    def __init__(self, counter_num):
        self.counter_num = counter_num
        self.count = 0

    def counting_thread(self):
        while True:
            print('Counter {0}: {1}'.format(self.counter_num, self.count))
            self.count += 1
            time.sleep(1)

    def start(self):
        thread = threading.Thread(target=self.counting_thread)
        thread.start()

counter = Counter(1)
counter.start()

time.sleep(1)

counter2 = Counter(2)
counter2.start()

The Results

The output is:

Counter 1: 0
Counter 1: 1
Counter 2: 0
Counter 1: 2
Counter 2: 1
Counter 1: 3
Counter 2: 2
Counter 1: 4
Counter 2: 3
Counter 1: 5
Counter 2: 4

Both counters are going at the same time, and the program runs indefinitely.

Beware of the GIL

The effects of Python's Global Interpreter Lock (GIL) are very important to understand. If you want to perform multiple processor-intensive tasks at once, you'll probably want to use multiprocessing. This is because the GIL limits your code to running on one thread. If you're doing things that won't fight for processing power, but instead are waiting tasks, such as requesting data from a server or waiting for the user to type something, then multi-threading is sufficient.

Comments

Leave a comment

What color are brown eyes? (spam prevention)
Submit
Code under MIT License unless otherwise indicated.
© 2020, Downranked, LLC.