python并发编程之多线程编程

一、threading模块介绍
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍

二、开启线程的两种方式
方式一:
from threading import Thread
import time
import random
def task(name):
print(‘%s is running‘ %name)
time.sleep(random.randint(1,3))
print(‘%s is end‘ %name)
#注意:在windows中Process()必须放到# if __name__ == ‘__main__‘:下
if __name__ == ‘__main__‘:
t1=Thread(target=task,args=(‘ALex‘,))
t1.start()
print(‘主函数‘)
#linux下的就不需要if __name__ == ‘__main__‘:
t1=Thread(target=task,args=(‘renwu1‘,))
t1.start()
print(‘主函数‘)
方式二:
from threading import Thread
import time
import random
class task(Thread):
def __init__(self,name):
super().__init__()
self.name=name
def run(self):
print(‘%s is runnging‘ %self.name)
time.sleep(random.randint(1,3))
print(‘%s is end‘ %self.name)
t1=task(‘renwu1‘)
t1.start()
print(‘主函数‘)

三、在一个进程下开启多个线程与在一个进程下开启多个子进程的区别
1、比较谁的开启速度快
from threading import Thread
from multiprocessing import Process
def task():
print(‘hello‘)
t1=Thread(target=task)
t1.start()
print(‘主函数/线程‘)

p1=Process(target=task)
p1.start()
print(‘主函数/进程‘)
2、查看pid
from threading import Thread
from multiprocessing import Process
import os
def task():
print(‘hello‘, os.getpid())
# 在主进程下开多个线程,每个线程都跟主进程的pid一样
t1=Thread(target=task)
t2=Thread(target=task)
t1.start()
t2.start()
print(‘主函数pid/线程‘,os.getpid())
# 在主进程下开多个进程,每个进程都有不同的pid
p1=Process(target=task)
p2=Process(target=task)
p1.start()
p2.start()
print(‘主函数pid/进程‘,os.getpid())
3、同一进程内的线程共享改进程内的数据
from threading import Thread
from multiprocessing import Process
def task():
global n
n=0
n=1
p=Process(target=task)
p.start()
p.join()
print(‘主函数/进程‘,n)

t=Thread(target=task)
t.start()
t.join()

原文地址:http://blog.51cto.com/10630401/2073045

时间: 2024-10-10 09:58:59

python并发编程之多线程编程的相关文章

python并发的痛——多线程

伴随着多核时代的到来,怎样充分利用好你的多个CPU的优势成了技术的关注点,那就是多线程多进程编程,二者的区别也很明显,进程是操作系统中拥有资源的最小单位,但是是重量级的.线程是系统调度的最小单位,是轻量级的,一个进程可以拥有很多个线程,但是线程是不拥有资源的,同一个进程中的线程共享这个进程中拥有的资源.以前学习java,一个灰常重要的并发方式就是多线程,因为线程的开销要比进程的少很多,而通过加锁来保证线程安全,进而有线程池来做进一步的优化. 所以前面也花了些时间对python的多线程编程进行了了

廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通常使用一个无限for循环,在这个for循环内部,每次调用accept方法,返回一个与远程客户新建的Socket连接,紧接着启动一个新的线程,来处理这个连接. ServerSocket ss = new ServerSocket(port); for( ; ; ){ Socket sock = ss.

.NET并行计算和并发5:多线程编程一般指导性原则

1 使用多线程时要考虑以下准则: 2 不要使用 Thread.Abort 终止其他线程. 对另一个线程调用 Abort 无异于引发该线程的异常,也不知道该线程已处理到哪个位置. 3 不要使用 Thread.Suspend 和 Thread.Resume 同步多个线程的活动. 请使用 Mutex.ManualResetEvent.AutoResetEvent 和 Monitor. 4 不要从主程序中控制辅助线程的执行(如使用事件), 而应在设计程序时让辅助线程负责等待任务,执行任务,并在完成时通知

python核心编程(多线程编程)

1.全局解释器锁 2.threading模块 thread类 原文地址:https://www.cnblogs.com/goobai/p/8689060.html

python 并发执行之多线程

正常情况下,我们在启动一个程序的时候.这个程序会先启动一个进程,启动之后这个进程会拉起来一个线程.这个线程再去处理事务.也就是说真正干活的是线程,进程这玩意只负责向系统要内存,要资源但是进程自己是不干活的.默认情况下只有一个进程只会拉起来一个线程. 多线程顾名思义,就是同样在一个进程的情况同时拉起来多个线程.上面说了,真正干活的是线程.进程与线程的关系就像是工厂和工人的关系.那么现在工厂还是一个,但是干活的工人多了.那么效率自然就提高了.因为只有一个进程,所以多线程在提高效率的同时,并没有向系统

python-学习-python并发编程之多进程与多线程

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing.    multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似.  multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,

python并发编程&多线程(一)

本篇理论居多,实际操作见:  python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线 流水线的工作需要电源,电源就相当于cpu 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多个控制线程)的概念

python并发编程&多线程(二)

前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链接:https://docs.python.org/3/library/threading.html?highlight=threading#(装B模式加载中…………) 二 开启线程的两种方式  方式一  方式二 三 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别  1 谁的开启速度快  2 瞅

python并发编程之多线程理论部分

阅读目录 一 什么是线程 二 线程的创建开销小 三 线程与进程的区别 四 为何要用多线程 五 多线程的应用举例 六 经典的线程模型(了解) 七 POSIX线程(了解) 八 在用户空间实现的线程(了解) 九 在内核空间实现的线程(了解) 十 用户级与内核级线程的对比(了解) 十一 混合实现(了解) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到