号外号外!本号已对接机器人,需要三连的小伙伴请关注我,自动回复的哈!
目前支持: # 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)可能更适合。