Python设计模式 并发


并发经常被误解为并行。并发意味着调度独立的代码以系统的方式执行。本章重点介绍使用 Python 为操作系统执行并发。

以下程序有助于操作系统的并发执行:

import os
import time
import threading
import multiprocessing

NUM_WORKERS = 4

def only_sleep():
    print("PID: %s, Process Name: %s, Thread Name: %s" % (
        os.getpid(),
        multiprocessing.current_process().name,
        threading.current_thread().name)
    )
    time.sleep(1)

def crunch_numbers():
    print("PID: %s, Process Name: %s, Thread Name: %s" % (
        os.getpid(),
        multiprocessing.current_process().name,
        threading.current_thread().name)
    )
    x = 0
    while x < 10000000:
        x += 1
for _ in range(NUM_WORKERS):
    only_sleep()
end_time = time.time()
print("Serial time=", end_time - start_time)

# Run tasks using threads
start_time = time.time()
threads = [threading.Thread(target=only_sleep) for _ in range(NUM_WORKERS)]
[thread.start() for thread in threads]
[thread.join() for thread in threads]
end_time = time.time()

print("Threads time=", end_time - start_time)

# Run tasks using processes
start_time = time.time()
processes = [multiprocessing.Process(target=only_sleep()) for _ in range(NUM_WORKERS)]
[process.start() for process in processes]
[process.join() for process in processes]
end_time = time.time()

print("Parallel time=", end_time - start_time)

上述程序产生如下输出:

Concurrency

解释

“multiprocessing”是一个类似于线程模块的包。这个包支持本地和远程并发。由于这个模块,程序员可以在给定系统上使用多个进程。