在Python中进行并发编程,可以用多线程和多进程两种方式。这里我将分别介绍它们的使用方法。
一、多线程
Python中的线程是轻量级的,且比较容易使用。我们可以使用threading
模块来进行多线程编程。
- 创建线程
可以通过创建Thread对象来创建线程。下面的代码片段演示了如何创建一个线程:
import threading
def worker():
"""thread worker function"""
print('Worker')
t = threading.Thread(target=worker)
t.start()
在这里,我们首先创建一个函数worker
,然后创建一个Thread对象,作为参数传入该函数。最后,调用start()方法来启动线程。
- 线程同步
线程同步是在多个线程之间协调共享的资源,以避免竞争条件的发生。Python提供了锁(Lock)对象来进行线程同步。
下面的代码演示了如何使用锁:
import threading
count = 0
lock = threading.Lock()
def worker():
"""thread worker function"""
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
threads = []
for i in range(10):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join()
print(count)
在这里,我们首先定义一个计数器count和一个锁对象lock。然后在worker函数里,我们使用了lock.acquire()
方法来获取锁,执行完逻辑后,使用lock.release()
方法来释放锁。
- 等待所有线程结束
可以使用join()方法来等待所有线程结束:
import threading
def worker():
"""thread worker function"""
print('Worker')
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join() # 等待所有线程结束
print('Done')
在这里,我们定义了5个线程,然后通过循环将其加入到一个列表中,并且启动线程。最后,使用t.join()方法让主线程等待所有子线程结束后再执行结束语句。
二、多进程
Python中的多进程模块是multiprocessing
。与线程模块类似,可以使用Process
对象来创建进程。
- 创建进程
以下代码演示了如何创建一个简单的进程:
import multiprocessing
import os
def worker():
"""worker function"""
print('Worker')
print('Parent process:', os.getppid())
print('Process ID:', os.getpid())
if __name__ == '__main__':
print('Main process:', os.getppid())
print('Main process ID:', os.getpid())
p = multiprocessing.Process(target=worker)
p.start()
在这里,我们创建了一个worker函数,并在创建一个Process对象时传递了该函数作为参数。最后,通过start()方法来启动进程。
- 进程池
multiprocessing
模块还提供了一些方便的进程池操作。
以下代码演示了如何使用进程池:
import multiprocessing
import os
def worker():
"""worker function"""
print('Worker')
print('Parent process:', os.getppid())
print('Process ID:', os.getpid())
if __name__ == '__main__':
print('Main process:', os.getppid())
print('Main process ID:', os.getpid())
pool = multiprocessing.Pool(processes=5)
for i in range(5):
pool.apply_async(worker)
pool.close()
pool.join()
在这里,我们创建了一个进程池,通过for循环向进程池中添加五个进程,然后通过pool.close()方法来关闭进程池,最后使用pool.join()方法让主进程等待所有子进程结束后再执行结束语句。
以上就是Python中多线程和多进程的使用方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在Python中进行并发编程? - Python技术站