如何在Python中进行并发编程?

yizhihongxing

在Python中进行并发编程,可以用多线程和多进程两种方式。这里我将分别介绍它们的使用方法。

一、多线程

Python中的线程是轻量级的,且比较容易使用。我们可以使用threading模块来进行多线程编程。

  1. 创建线程

可以通过创建Thread对象来创建线程。下面的代码片段演示了如何创建一个线程:

import threading

def worker():
    """thread worker function"""
    print('Worker')

t = threading.Thread(target=worker)
t.start()

在这里,我们首先创建一个函数worker,然后创建一个Thread对象,作为参数传入该函数。最后,调用start()方法来启动线程。

  1. 线程同步

线程同步是在多个线程之间协调共享的资源,以避免竞争条件的发生。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()方法来释放锁。

  1. 等待所有线程结束

可以使用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对象来创建进程。

  1. 创建进程

以下代码演示了如何创建一个简单的进程:

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()方法来启动进程。

  1. 进程池

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技术站

(0)
上一篇 2023年4月19日
下一篇 2023年4月19日

相关文章

  • 如何在 Android 手机上设置 android-scripting + python?

    【问题标题】:how to setup android-scripting + python on Android phones?如何在 Android 手机上设置 android-scripting + python? 【发布时间】:2023-04-06 18:01:01 【问题描述】: 我已经下载了最新可用版本的 python 解释器here。现在,我如…

    Python开发 2023年4月7日
    00
  • 如何在python中将以前的打印覆盖到标准输出?

    【问题标题】:How to overwrite the previous print to stdout in python?如何在python中将以前的打印覆盖到标准输出? 【发布时间】:2023-04-06 15:33:01 【问题描述】: 如果我有以下代码: for x in range(10): print x 我会得到输出 1 2 etc.. 我想…

    Python开发 2023年4月7日
    00
  • python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py

    首先,报错信息中的 import numpy as np 是在导入 NumPy 库,所以我们需要先安装好 NumPy 库。可以使用 pip 命令(Python 自带的包管理工具)进行安装: pip install numpy 如果已经安装过,可以升级到最新版本: pip install –upgrade numpy 安装完成后,在 Python 代码中使用…

    python 2023年5月13日
    00
  • python基础之爬虫入门

    Python基础之爬虫入门 本文将介绍Python爬虫的基础知识,包括爬虫的基本原理、常用的爬虫库、爬虫的流程和示例说明。 爬虫的基本原理 爬虫是一种自动化程序,用于从互联网上获取数据。爬虫的基本原理是通过HTTP协议向目标网站发送请求,获取网站的HTML代码,然后解析HTML代码,提取需要的数据。 常用的爬虫库 Python中有很多优秀的爬虫库,包括: r…

    python 2023年5月14日
    00
  • Python实现的简单文件传输服务器和客户端

    下面是关于“Python实现的简单文件传输服务器和客户端”的完整攻略,包含以下几个部分: 一、实现思路: 创建一个TCP服务器,用于接收客户端的请求。 客户端连接服务器,进行文件上传或下载操作。 服务器接收到客户端的请求后,根据请求类型进行文件的上传或下载。 客户端将需要上传或下载的文件发送给服务器,服务器接收后存储到指定位置。 客户端从服务器下载文件时,服…

    python 2023年6月5日
    00
  • 详解SpringBoot实现事件同步与异步监听

    下面详细讲解“详解SpringBoot实现事件同步与异步监听”的完整攻略。该攻略将包括以下内容: 什么是事件 Spring Framework中的事件 SpringBoot如何实现事件监听 同步事件和异步事件的区别与应用场景 SpringBoot实现同步事件监听的示例 SpringBoot实现异步事件监听的示例 什么是事件 在计算机科学中,事件是指系统或应用…

    python 2023年6月13日
    00
  • python操作excel的方法

    现在我来详细讲解一下Python操作Excel文件的方法,包括如何读取、写入、创建、编辑和修改Excel文件。本文主要介绍两种解决方案:使用开源库xlrd和openpyxl。 读取Excel文件 使用xlrd库 xlrd库是Python读取Excel的一个常用库。它最适合读取.xls文件,但不支持读取.xlsx文件。下面是读取Excel文件的例子: impo…

    python 2023年5月13日
    00
  • 详解Python的连接符

    首先我们来讲解Python中的连接符。 在Python中,常用的连接符有加号“+”和逗号“,”。加号用于连接字符串,而逗号用于连接多个不同类型的数据(包括字符串、数字等),并用空格隔开。 现在我们分别用两个示例说明这两种连接符的用法。 使用加号“+”对字符串进行连接 a = "Hello" b = "World" c …

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部