网络系统

  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()

局部变量对于进程不共享

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,547评论 8 265
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 11,307评论 4 56
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 5,401评论 1 22
  • 到了年末,韩剧又开始放大招了,追不完的剧,什么全智贤噢尼还有李敏镐哦巴的美人鱼之恋啊,什么釜山行帅裂男主孔侑和奶酪...
    蜗牛与琴阅读 222评论 0 0