【python】多进程并发异步调用

简介: 【python】多进程并发异步调用

号外号外!本号已对接机器人,需要三连的小伙伴请关注我,自动回复的哈!

目前支持:
# Csdn自动回复机器人
# 20230405
####被动模式####
# 支持点赞、收藏回访
# 关注回访(对方至少有一条博客的记录)
# 评论回访
####主动模式####
# 私信检测到群发消息自动三连/满足模板设定给予三连触发
####bug优化及更新####
# 优化检测模式,防止出现多触发情况
# 为了防止操作额度不够,只处理最新发表的博客(第一条),不在继续往下操作
# 暂未对动态blink进行调整,理论可以
# 评论多评检测(防止有人故意而为之)
#热榜评论
#接下来自动发表博客(对接chatgpt)

正文

在python中,如何使函数调用各自运行,不互相影响,例如下面代码:

import time
def A():
    for i in range(1,100):
        print(i)
        time.sleep(1)
    print("a function")
def B():
    for i in range(100, 120):
        print(i)
        time.sleep(2)
    print("b function")
A()
B()

对于线程并发这一块我也搞不清楚,问了百度不好使,最后问了gpt

要让两个函数互不影响地运行,可以使用 Python 的 multiprocessing模块。这个模块可以让你在不同的进程中运行函数,从而实现并行计算。

以下是如何使用 multiprocessing 模块重写你的代码:

import time
import multiprocessing
def A():
    for i in range(1,100):
        print(i)
        time.sleep(1)
    print("a function")
def B():
    for i in range(100, 120):
        print(i)
        time.sleep(2)
    print("b function")
if __name__ == '__main__':
    p1 = multiprocessing.Process(target=A)
    p2 = multiprocessing.Process(target=B)
    p1.start()
    p2.start()
    p1.join()
    p2.join()

这里我们将函数 A 和 B 分别放到两个不同的进程中运行,并且使用 start() 方法启动这两个进程。join() 方法则会等待进程执行完毕后再继续执行后续的代码。使用 if name == ‘main’: 判断语句可以保证在 Windows 操作系统下运行多进程代码时不会出现异常。

虽然 Python 也支持多线程编程,但是在 Python 中使用多线程并不能充分发挥多核 CPU

的计算能力,因为由于全局解释器锁(Global Interpreter Lock,GIL)的存在,同一时间只能有一个线程在解释 Python

代码。而使用多进程则可以充分利用多核 CPU 的计算能力,因为每个进程都有自己的 Python 解释器和独立的内存空间,进程之间不会受到

GIL 的限制。因此,在需要充分利用多核 CPU 的情况下,使用多进程并发是更好的选择。

需要注意的是,使用多进程会产生额外的开销,因为每个进程都需要分配独立的内存空间和 Python

解释器。因此,在需要大量计算的情况下,使用多进程并发可以获得更好的性能表现,但是在处理 IO

密集型任务时,多进程并发的开销可能会超过性能提升的收益。在这种情况下,使用异步编程模型(例如 asyncio)可能更适合。

相关文章
|
6天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
20 3
|
1天前
|
消息中间件 安全 数据处理
Python中的并发编程:理解多线程与多进程的区别与应用
在Python编程中,理解并发编程是提高程序性能和响应速度的关键。本文将深入探讨多线程和多进程的区别、适用场景及实际应用,帮助开发者更好地利用Python进行并发编程。
|
4天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
【7月更文挑战第11天】Python的asyncio库简化了单线程并发编程,利用协程和事件循环实现异步操作。async def定义异步函数,await挂起协程等待IO完成。例如,fetch_data模拟网络请求,main函数并发执行多个任务。asyncio.gather收集结果,Semaphore限制并发数,保证资源管理。asyncio提供高效优雅的并发解决方案。
20 4
|
5天前
|
API 开发者 Python
Python并发新纪元:asyncio库,让你的代码异步飞行,效率翻倍!
【7月更文挑战第10天】Python的asyncio库推动了异步编程革命,简化并发任务,提高I/O效率。通过事件循环和协程,asyncio允许程序在等待如HTTP请求时执行其他任务。例如,使用aiohttp并发获取多个网站数据,显著提升效率。随着asyncio生态成熟,它成为高效编程的必备工具,赋能开发者实现代码的“异步飞行”。
14 2
|
5天前
|
数据库 数据安全/隐私保护 C++
Python并发编程实战:线程(threading)VS进程(multiprocessing),谁才是并发之王?
【7月更文挑战第10天】Python并发对比:线程轻量级,适合I/O密集型任务,但受GIL限制;进程绕过GIL,擅CPU密集型,但通信成本高。选择取决于应用场景,线程利于数据共享,进程利于多核利用。并发无“王者”,灵活运用方为上策。
|
5天前
|
消息中间件 JSON 自然语言处理
python多进程日志以及分布式日志的实现方式
python日志在多进程环境下的问题 python日志模块logging支持多线程,但是在多进程下写入日志文件容易出现下面的问题: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 也就是日志文件被占用的情况,原因是多个进程的文件handler对日志文件进行操作产生的。
|
2天前
|
Unix Linux Python
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
6 0
|
2天前
|
Python
在Python中,`multiprocessing`模块提供了一种在多个进程之间共享数据和同步的机制。
在Python中,`multiprocessing`模块提供了一种在多个进程之间共享数据和同步的机制。
4 0
|
2天前
|
安全 API Python
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
5 0
|
2天前
|
Python
Python的`signal`模块提供了访问底层操作系统提供的信号机制的方式。信号是操作系统用来通知进程发生了某种情况(如用户按下Ctrl+C)的一种机制。
Python的`signal`模块提供了访问底层操作系统提供的信号机制的方式。信号是操作系统用来通知进程发生了某种情况(如用户按下Ctrl+C)的一种机制。
5 0