网络系统

  1. 程序:一堆冷冰冰的代码,编写完毕的代码,在没有运行的时候,称之为程序
    进程:把程序运行起来就会开启进程,正在运行着的代码,就成为进程

  2. getpid:获取进程号
    getppid:获取父进程号

  3. 单核CPU是怎么执行多任务的呢?
    操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。

  4. 并行:一起执行
    并发:看似一起执行,其实按一定顺序执行

import os
pid=os.fork()
if pid==0:
    print('子进程')
else:
    print('父进程')
  1. os.fork()
    子进程返回的是0
    父进程返回的是子进程的pid
    多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响-----------全局变量对于进程是不共享的

  2. 实现多进程

from multiprocessing import Process
import time
def work():
    for i in range(5):
        time.sleep(1)
        print('呵呵')
p=Process(target=work)
p.start()
  1. 用面向对象的方式实现多进程
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('呵呵')
  1. 用进程池的方式创建进程
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()
  1. 用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()
  1. threading线程实现多任务
import time
from threading import Thread
def say():
    time.sleep(1)
    print('我错了,我能站起来了吗?')
for i in range(5):
    t=Thread(target=say)
    t.start()

主线程会等待所有的子线程结束后才结束

  1. 用面向对象的实现
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()
  1. 全局变量对于线程共享(对于进程不共享)
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()

局部变量对于进程不共享

你可能感兴趣的:(网络系统)