程序:一堆冷冰冰的代码,编写完毕的代码,在没有运行的时候,称之为程序
进程:把程序运行起来就会开启进程,正在运行着的代码,就成为进程getpid:获取进程号
getppid:获取父进程号单核CPU是怎么执行多任务的呢?
操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。并行:一起执行
并发:看似一起执行,其实按一定顺序执行
import os
pid=os.fork()
if pid==0:
print('子进程')
else:
print('父进程')
os.fork()
子进程返回的是0
父进程返回的是子进程的pid
多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响-----------全局变量对于进程是不共享的实现多进程
from multiprocessing import Process
import time
def work():
for i in range(5):
time.sleep(1)
print('呵呵')
p=Process(target=work)
p.start()
- 用面向对象的方式实现多进程
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self):#初始化父类方法
super().__init__()
def run(self):#重写run方法
for i in range(5):
time.sleep(1)
print('哈哈')
p=MyProcess()
p.start()
p.join(3)
print('呵呵')
- 用进程池的方式创建进程
from multiprocessing import Pool
import time
def work():
for i in range(5):
time.sleep(1)
print('老王')
p=Pool(3)
for i in range(3):
p.apply_async(work)#非阻塞添加进程
#p.apply(work)#阻塞
print('添加成功')
p.close()#把池子关闭
p.join()
- 用Queue实现多进程通信
from multiprocessing import Pool,Manager
import time
def write(q):
for i in range(5):
time.sleep(0.5)
print('添加成功')
q.put(i)
def read(q):
while True:
if q.qsize()>0:
print(q.get())
if q.get()==4:
break
p=Pool(3)
q=Manager().Queue()
p.apply(write,(q,))
p.apply(read,(q,))
p.close()
p.join()
- threading线程实现多任务
import time
from threading import Thread
def say():
time.sleep(1)
print('我错了,我能站起来了吗?')
for i in range(5):
t=Thread(target=say)
t.start()
主线程会等待所有的子线程结束后才结束
- 用面向对象的实现
from threading import Thread
import time
class MyThread(Thread):
def run(self):
for i in range(3):
time.sleep(1)
print("我爱你中国")
t = MyThread()
t.start()
t1 = MyThread()
t1.start()
- 全局变量对于线程共享(对于进程不共享)
from threading import Thread
import threading
import time
num = 0
def test1():
global num
num+=1
time.sleep(1)
print(threading.currentThread().name)
print('test1',num)
def test2():
time.sleep(3)
print("test2",num)
t1 = Thread(target=test1)
t1.start()
t2 = Thread(target=test2)
t2.start()
局部变量对于进程不共享