SoFunction
Updated on 2025-04-13

Asynchronous and Synchronous Deep Analysis in Python (Practical Record)

Asynchronous and Synchronous in Python: Deep Analysis and Practice

In the Python programming world, the concepts of asynchronous and synchronous are key to understanding program execution flow and performance optimization. This article will take you into the depth of their differences, as well as the blocking and non-blocking properties, while deepening your understanding with actual code examples.

Definition of asynchronous and synchronous

asynchronous

Asynchronous means multitasking, and there is no strict order of execution between tasks, and it can even be run at the same time. This is like when you listen to music while browsing the web page, listening to music and browsing the web page, the two tasks do not interfere with each other. The execution paths of multiple tasks exist at the same time, and the program has multiple "main lines" to process tasks in parallel.

synchronous

Synchronization is also a process of multitasking, but there is a strict order between tasks. Only when the previous task is executed and the next task can be started. This is similar to when you queue up to buy things. You have to buy them one by one and then the next person can continue to buy them. There is only one "main line" in the whole process.

The concept of blocking and non-blocking

block

From the caller's point of view, if the program is stuck when calling an operation and cannot continue to execute downward, you must wait for the operation to complete, which is blocking. For example, when you call to order takeaway, you can't do anything else while waiting for the takeaway to be delivered, so you can only wait. This is the "blocking" state.

Non-blocking

When an operation is called, the program will not be stuck and can continue to execute downward without waiting for the operation to complete. This is non-blocking. Take ordering takeaway as an example. After placing an order, you can continue to do your own thing without having to wait for takeaway. This is the "non-blocking" state.

Synchronous blocking vs. asynchronous non-blocking examples

The following is a Python code to show how asynchronous and synchronous work. Here we usemultiprocessingIn the modulePoolCreate a process pool and implement multitasking.

from multiprocessing import Pool
import time
import os
def water():
    """Boil water"""
    print(f"Subprocess pid={()}")
    for i in range(5):
        print("Burning water")
        (0.5)
    return "The water boils"
def handle_water(message):
    """Receive information about boiling water"""
    print(f"processpid={()} Received the end message of the asynchronous task: {message}")
pool = Pool(3)
print(f"主process pid={()}")
for i in range(3):
    print("Play the game")
    (0.5)
# Callbackpool.apply_async(water, callback=handle_water)  # Add tasks asynchronouslyfor i in range(20):
    print("Play the game")
    (0.5)
()
()

In this code:

  • First, a process pool was createdPool, the maximum number of processes is 3.
  • The main process first performs a "playing game" operation, cycles 3 times, with 0.5 seconds apart each time.
  • Then usepool.apply_asyncMethods are added asynchronouslywaterTasks to the process pool and set the callback functionhandle_waterwaterThe task simulates the water boiling process, which will print the current subprocess ID and output "boiling water" every 0.5 seconds. After completion, it will return to "boiled water".handle_waterFunctions are used to receivewaterThe information after the task is completed and printed.
  • Then the main process continues to perform the "play game" operation, with a 20 cycle times, with an interval of 0.5 seconds each time. During this period,waterTasks are executed asynchronously in the background.
  • Finally, call()Close the process pool and no longer accept new tasks.()Let the main process wait for all child processes to complete the task before ending.

Through this example, you can clearly see that asynchronous tasks are executed in the background and will not block other operations of the main process, reflecting the asynchronous non-blocking characteristics. Ifpool.apply_asyncChange to, then it is the effect of synchronous blocking.waterThe main process will be blocked when the task is executed, and subsequent code will not continue to be executed until the task is completed.

Understanding the concepts of asynchronous, synchronous, blocking and non-blocking can help developers optimize program performance according to actual needs, make rational use of system resources, and make programs run more efficient and flexible. Whether it is handling I/O-intensive tasks or CPU-intensive tasks, choosing the right execution method is key.

This is the article about asynchronous and synchronization in Python: parsing and practice. For more related Python asynchronous and synchronization content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!