没有合适的资源?快使用搜索试试~ 我知道了~
Python里的多线程是假的多线程,不管有多少核,同一时间只能在一个核中进行操作!利用Python的多线程,只是利用CPU上下文切换的优势,看上去像是并发,其实只是个单线程,所以说他是假的单线程。 那么什么时候用多线程呢? 首先要知道: io操作不占用CPU 计算操作占CPU,像2+5=5 Python的多线程不适合CPU密集操作型的任务,适合io密集操作型的任务,例如:SocketServer 如果现在再有CPU密集操作型的任务,那该怎么办呢? 首先说,多进程的进程之间是独立的,然后注意了,python的线程用的是系统的原生线程,python的进程也是用系统的原生进程,那原生进程是由
资源推荐
资源详情
资源评论
深入理解深入理解Python 多线程多线程
Python里的多线程是假的多线程,不管有多少核,同一时间只能在一个核中进行操作!利用Python的多线程,只是利用CPU
上下文切换的优势,看上去像是并发,其实只是个单线程,所以说他是假的单线程。
那么什么时候用多线程呢?那么什么时候用多线程呢?
首先要知道:
io操作不占用CPU
计算操作占CPU,像2+5=5
Python的多线程不适合的多线程不适合CPU密集操作型的任务,适合密集操作型的任务,适合io密集操作型的任务,例如密集操作型的任务,例如:SocketServer
如果现在再有如果现在再有CPU密集操作型的任务,那该怎么办呢?密集操作型的任务,那该怎么办呢?
首先说,多进程的进程之间是独立的,然后注意了,python的线程用的是系统的原生线程,python的进程也是用系统的原生进
程,那原生进程是由操作系统维护的,说白了python只是利用C原生代码库的接口咵嚓起了个进程,真正的进程管理还是由操
作系统来完成的,那么操作系统本身有GIL全局解释器锁吗?答案是没有的,且两个进程之间的数据是完全独立的,不能互相
访问,所以不需要锁的概念,所以不存在GIL概念,所以在这种情况下,每个进程至少会有一个线程,如果现在我的操作系统
是八核的,我起八个进程,然后每个进程里面都有一个线程,那么就相当于八线程了,八个线程跑在八核上,那么就相当于利
用多核了,那么问题就解决了!
唯一的坏处是八个线程之间的数据是不能共享的,独立的!利用这种方法可以折中的解决多核运算的问题!
先看一段简单的多进程的程序:
import multiprocessing
import time
def run(name):
time.sleep(2)
print('hello', name)
if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=run, args=('bob%s'%i,))
p.start()
程序的执行结果为:
hello bob0
hello bob1
hello bob3
hello bob2
hello bob5
hello bob9
hello bob7
hello bob8
hello bob4
hello bob6
那么,如果我想取我的进程号,那该怎么取呢?那么,如果我想取我的进程号,那该怎么取呢?
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid()) # 父进程ID
print('process id:', os.getpid()) # 自己进程的ID
print("")
def f(name):
info('[31;1mfunction f[0m')
print('hello', name)
if __name__ == '__main__':
资源评论
weixin_38697063
- 粉丝: 6
- 资源: 956
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功