进程 线程
2021-07-02 20:08
标签:src 根据 star 获取 执行 函数 http 快速 分享图片 一.关于线程和进程的说明 python本身没有进程和线程,python中调用了操作系统的线程和进程. 一个应用程序(软件),可以有多个进程(默认只有一个),一个进程中可以创建多个线程(默认一个). 创建进程是为了提供环境让线程工作,进程和进程之间做数据隔离(java/c#) 创建线程是因为线程是cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(java/c#) 而python中存在一个GIL锁造成多线程无法利用多核优势,只能开多进程处理(浪费资源) 查看GIL切换的指令(sys.getcheckinterval) Python语言的创始人在开发这门语言时,目的是快速把语言开发出来,如果加上GIL锁(C语言加锁),切换时按照100条字节指令来进行线程间的切换。 二. python进程,线程和java,c#的区别 python多线程情况下: 计算密集型操作:效率低(GIL锁) IO操作:效率高 python多进程的情况下: 计算密集型操作:效率高(浪费资源)不得已而为之. IO操作:效率高(浪费资源) 写python时IO密集型用多线程,计算密集型用多进程 java,c#多线程情况下: 计算密集型操作:效率高 IO操作:效率高 java,c#多进程的情况下: 计算密集型操作:效率高(浪费资源) IO操作:效率高(浪费资源) 三. 线程的一些参数 start 线程准备就绪等待CPU调度 setDaemon 主线程不再等,主线程终止则所有子线程终止 join 无参数,让主线程在这里等着,等到设置join的子线程执行完毕,才可以继续往下走. join 有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走 threading.current_thread() 获取当前执行该函数的线程的对象 getName 根据当前线程对象获取当前线程名称 setName 给当前线程对象设置名称 四.多线程方式 多线程方式:1 多线程方式:2 进程 线程 标签:src 根据 star 获取 执行 函数 http 快速 分享图片 原文地址:https://www.cnblogs.com/nianshaoyouwei/p/9628670.htmldef func(arg):
print(arg)
t1 = threading.Thread(target=func,args=(11,))
t1.start()
class MyThread(threading.Thread):
def run(self):
print(123,self._args,self._kwargs)
t1 = MyThread(args=(11,))
t1.start()
t2 = MyThread(args=(22,))
t2.start()