【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)可能更适合。

猜你喜欢

转载自blog.csdn.net/qq_35230125/article/details/130000578