1.线程场景一:
import threading
import time
def run(x):
time.sleep(2)
print(x)
t1 = threading.Thread(target=run,args=('x',))
t2 = threading.Thread(target=run,args=('y',))
t1.start()
t2.start()
线程场景二:
class Mythread(threading.Thread):
def __init__(self,n):
super(Mythread,self).__init__()
self.n = n
def run(self):
print("running task",self.n)
t3 = Mythread("t3")
t4 = Mythread("t4")
t3.start()
t4.start()
场景三:主线程启动后,和它启动的子线程是并行的,因此主线程启动后,并不会等子线程执行完毕,就继续执行主线程后面的代码
def run(x):
time.sleep(2)
print(x)
begin_time = time.time()
for i in range(50):
t = threading.Thread(target=run,args=("t %s" %i ,))
t.start()
print("all threads is finished")
print(time.time() - begin_time)
场景四:通过join等待子线程全部执行完成后,再执行主线程
begin_time = time.time()
t_objs = []
for i in range(50):
t = threading.Thread(target=run,args=("t %s" %i ,))
t.start()
t_objs.append(t)
for r in t_objs:
r.join()
print("all threads is finished")
print(time.time() - begin_time)
2.全局解释器锁
③.python多进程,不同进程的内存独立、数据是不共享的。线程是共享的
每个进程都是有父进程启动的
④.进程间通讯queue
import threading
import time
def run(x):
time.sleep(2)
print(x)
t1 = threading.Thread(target=run,args=('x',))
t2 = threading.Thread(target=run,args=('y',))
t1.start()
t2.start()
线程场景二:
class Mythread(threading.Thread):
def __init__(self,n):
super(Mythread,self).__init__()
self.n = n
def run(self):
print("running task",self.n)
t3 = Mythread("t3")
t4 = Mythread("t4")
t3.start()
t4.start()
场景三:主线程启动后,和它启动的子线程是并行的,因此主线程启动后,并不会等子线程执行完毕,就继续执行主线程后面的代码
def run(x):
time.sleep(2)
print(x)
begin_time = time.time()
for i in range(50):
t = threading.Thread(target=run,args=("t %s" %i ,))
t.start()
print("all threads is finished")
print(time.time() - begin_time)
场景四:通过join等待子线程全部执行完成后,再执行主线程
begin_time = time.time()
t_objs = []
for i in range(50):
t = threading.Thread(target=run,args=("t %s" %i ,))
t.start()
t_objs.append(t)
for r in t_objs:
r.join()
print("all threads is finished")
print(time.time() - begin_time)
2.全局解释器锁
不管多少核,python都是单核操作,多任务只是个假象
3.进程
①.io操作不占用CPU,计算占用cpu,如1+1
②.python多线程 不适合cpu密集操作型的任务,适合io操作密集型的任务③.python多进程,不同进程的内存独立、数据是不共享的。线程是共享的
每个进程都是有父进程启动的
④.进程间通讯queue