并发经常被误解为并行性.并发意味着调度独立代码以系统方式执行.本章重点介绍使用Python执行操作系统的并发性.
以下程序有助于执行操作系统的并发性 :
import osimport timeimport threadingimport multiprocessingNUM_WORKERS = 4def 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 += 1for _ in range(NUM_WORKERS): only_sleep()end_time = time.time()print("Serial time=", end_time - start_time)# Run tasks using threadsstart_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 processesstart_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)
输出
以上程序生成以下输出 :
说明
"multiprocessing"是一个类似于线程模块的包.该包支持本地和远程并发.由于这个模块,程序员可以在给定系统上使用多个进程.