#并发和并行

#实现多任务的方式:

1.多进程模式

2.多线程模式

3.协程

进程>线程 >协程

#在linux下可以使用fork函数创建进程,

#在windows下可以引用multiprocessing模块,创建进程。

可以使用multiprocessing模块中的Process类创建新的进程

Process类说明

构造方法 __init__()

参数:

name: 进程名称

args: 任意位置参数

kwargs: 任意关键字参数

target: 进程实例所调用的对象

#创建父子进程执行不同的内容是多任务中固定的方法

#进程创建

from multiprocessing import Process

import time

import os

def task1():

while True:

time.sleep(1)

#os.getpid() 得到当前进程的id, pid: process id

#os.getppid() 得到当前进程的父进程id , ppid: parent process id

print("task111111111111", os.getpid(),"--------",os.getppid())

def task2():

while True:

time.sleep(1)

print("task222222222", os.getpid(),"--------",os.getppid())

if __name__=="__main__":

#给进程起的名字叫做 “任务1”

p = Process(target=task1, name="任务1")

p.start()

print(p.name) #打印进程的名字

#给进程起的名字叫做 “任务2”

p1 = Process(target=task2, name="任务2")

p1.start()

print(p1.name)

任务1

任务2

task111111111111 20165 -------- 16191

task222222222 20166 -------- 16191

task111111111111 20165 -------- 16191

task222222222 20166 -------- 16191

task111111111111 20165 -------- 16191

task222222222 20166 -------- 16191

Process 任务2:

Process 任务1:

Traceback (most recent call last):

Traceback (most recent call last):

time.sleep(1)

KeyboardInterrupt

KeyboardInterrupt

#进程创建

#可以传入多个参数,然后用多个参数来接收

def task1(s, v):

while True:

print(s, type(s))

time.sleep(s)

print("task111111111111", v,"---", os.getpid(),"--------",os.getppid())

def task2(s, v):

while True:

print(s, type(s))

time.sleep(s)

print("task222222222", v,"---", os.getpid(),"--------",os.getppid())

if __name__=="__main__":

#可迭代的参数args, args=(参数1,参数2), 以元组的形式传入参数

p = Process(target=task1, name="任务1", args=(1,"aa"))

p.start()

print(p.name) #打印进程的名字

p1 = Process(target=task2, name="任务2", args=(2,"bb"))

p1.start()

print(p1.name)

任务1

1

任务2

2

task111111111111 aa --- 20873 -------- 16191

1

task222222222 bb --- 20876 -------- 16191

2

task111111111111 aa --- 20873 -------- 16191

1

task111111111111 aa --- 20873 -------- 16191

1

task222222222 bb --- 20876 -------- 16191

2

task111111111111 aa --- 20873 -------- 16191

1

Process 任务1:

Process 任务2:

Traceback (most recent call last):

KeyboardInterrupt

进程 > 线程 > 协程

from multiprocessing import Process

Process(target=函数, name=进程的名字, args=(给函数传递的参数))

#可以传入多个参数,然后用多个参数来接收

#全局变量m

m =1

def task1(s, v):

global m

while True:

print(s, type(s))

time.sleep(s)

m += 1

print("task111111111111","---", m)

def task2(s, v):

global m

while True:

print(s, type(s))

time.sleep(s)

m += 1

print("task222222222","---", m)

if __name__=="__main__":

#print("------os.getpid()")

#print(os.getpid())

#子进程

p = Process(target=task1, name="任务1", args=(1,"aa"))

p.start()

p1 = Process(target=task2, name="任务2", args=(2,"bb"))

p1.start()

num = 0

while True:

m += 1

print("------------->main", m)

num += 1

time.sleep(0.2)

#到10,进程就terminate(), 终止了

if num == 100:

p.terminate()

p1.terminate()

break

else:

print("--------->number ",num)

1

2

------------->main 2

--------->number 1

------------->main 3

--------->number 2

------------->main 4

--------->number 3

------------->main 5

task111111111111 --- 2

--------->number 4

------------->main 6

1

--------->number 5

------------->main 7

--------->number 6

------------->main 8

--------->number 7

------------->main 9

--------->number 8

------------->main 10

Process 任务2:

Traceback (most recent call last):

--------->number 9

------------->main 11

Process 任务1:

---------------------------------------------------------------------------

KeyboardInterrupt Traceback (most recent call last)

in ()

35 print("------------->main", m)

36 num += 1

---> 37 time.sleep(0.2)

38 #到10,进程就terminate(), 终止了

39 if num == 100:

KeyboardInterrupt:

Traceback (most recent call last):

KeyboardInterrupt

KeyboardInterrupt

#进程创建的方法

p = Process(target=task1, name="任务1", args=(1,"aa"))

p.start() #进程开始, 并执行任务

p.terminate() #进程结束

#多进程对于全局变量访问,在每一个全局变量里面都放一个m变量

# 保证每个进程访问变量互不干扰

# 这个和 可变,不可变对象没有关系,

#每个进程都独立的拥有一个全局变量的拷贝

m = 1 #不可变类型

list1 = [] #可变类型

def task1(s, name):

global m

while True:

print(s, type(s))

time.sleep(s)

m += 1

list1.append(str(m)+"task1")

print("task111111111111","---", m, list1)

def task2(s, name):

global m

while True:

print(s, type(s))

time.sleep(s)

m -= 1

list1.append(str(m)+"task1")

print("task222222222","---", m, list1)

if __name__ == "__main__":

print("os.getpid():",os.getpid())

#子进程

#根据打印的m的数值可以看出,每个进程都独立的拥有一个全局变量的拷贝

p = Process(target=task1, name="任务1", args=(1, "任务1"))

p.start()

print("p.name", p.name)

p1 = Process(target=task2, name="任务2", args=(1,"任务2"))

p1.start()

print("p1.name", p1.name)

os.getpid(): 16191

p.name 任务1

p1.name 任务2

1

1

task111111111111 --- 2 ['2task1']

task222222222 --- 0 ['0task1']

1

1

task111111111111 --- 3 ['2task1', '3task1']

task222222222 --- -1 ['0task1', '-1task1']

1

1

task111111111111 --- 4 ['2task1', '3task1', '4task1']

1

task222222222 --- -2 ['0task1', '-1task1', '-2task1']

1

Process 任务1:

Process 任务2:

Traceback (most recent call last):

Traceback (most recent call last):

KeyboardInterrupt

# 进程:自定义

from multiprocessing import Process

#继承于 Process 类

class MyProcess(Process):

def __init__(self, name):

#调用父类的构造函数

super(MyProcess, self).__init__()

#这里的name是用户自定义的时候传递的name参数

self.name = name

#重写run方法

def run(self):

n = 1

while True:

print("进程名字:"+self.name)

print("{}---->自定义进程, n:{}".format(n,self.name))

n += 1

if __name__ == "__main__":

p = MyProcess("小明")

#p.start()所做的两件事情:1.开启新的进程 2.调用run()方法

p.start()

p1 = MyProcess("小红")

p1.start()

#p 和 p1这两个进程争夺cpu,cpu有其自己的调度方法, 执行顺序是不确定的,

#谁可以 获得时间片, 就执行谁

进程名字:小红

1---->自定义进程, n:小明

1---->自定义进程, n:小红

进程名字:小明

2---->自定义进程, n:小明

进程名字:小红

2---->自定义进程, n:小红

进程名字:小明

进程名字:小红

3---->自定义进程, n:小明

3---->自定义进程, n:小红

进程名字:小明

进程名字:小红

4---->自定义进程, n:小明

4---->自定义进程, n:小红

进程名字:小明

进程名字:小红

5---->自定义进程, n:小明

5---->自定义进程, n:小红

进程名字:小红

进程名字:小明

6---->自定义进程, n:小明

6---->自定义进程, n:小红

进程名字:小明

进程名字:小红

7---->自定义进程, n:小红

7---->自定义进程, n:小明

进程名字:小红

进程名字:小明

8---->自定义进程, n:小明

8---->自定义进程, n:小红

进程名字:小红

9---->自定义进程, n:小红

进程名字:小明

9---->自定义进程, n:小明

进程名字:小红

10---->自定义进程, n:小红

进程名字:小明

10---->自定义进程, n:小明

进程名字:小红

进程名字:小明

11---->自定义进程, n:小红

11---->自定义进程, n:小明

进程名字:小红

进程名字:小明

12---->自定义进程, n:小红

12---->自定义进程, n:小明

进程名字:小红

13---->自定义进程, n:小红

进程名字:小明

13---->自定义进程, n:小明

进程名字:小红

14---->自定义进程, n:小红

进程名字:小明

14---->自定义进程, n:小明

进程名字:小红

进程名字:小明

15---->自定义进程, n:小红

15---->自定义进程, n:小明

进程名字:小红

16---->自定义进程, n:小红

进程名字:小明

16---->自定义进程, n:小明

进程名字:小红

17---->自定义进程, n:小红

进程名字:小明

进程名字:小红

17---->自定义进程, n:小明

18---->自定义进程, n:小红

进程名字:小明

进程名字:小红

18---->自定义进程, n:小明

进程名字:小明

19---->自定义进程, n:小红

进程名字:小红

19---->自定义进程, n:小明

进程名字:小明

20---->自定义进程, n:小红

进程名字:小红

20---->自定义进程, n:小明

21---->自定义进程, n:小红

进程名字:小明

进程名字:小红

21---->自定义进程, n:小明

进程名字:小明

22---->自定义进程, n:小红

22---->自定义进程, n:小明

进程名字:小红

进程名字:小明

23---->自定义进程, n:小红

23---->自定义进程, n:小明

进程名字:小红

进程名字:小明

24---->自定义进程, n:小红

进程名字:小红

24---->自定义进程, n:小明

进程名字:小明

25---->自定义进程, n:小红

25---->自定义进程, n:小明

进程名字:小明

进程名字:小红

26---->自定义进程, n:小红

26---->自定义进程, n:小明

进程名字:小明

进程名字:小红

27---->自定义进程, n:小明

27---->自定义进程, n:小红

进程名字:小明

进程名字:小红

28---->自定义进程, n:小红

28---->自定义进程, n:小明

进程名字:小明

进程名字:小红

29---->自定义进程, n:小红

29---->自定义进程, n:小明

进程名字:小明

进程名字:小红

30---->自定义进程, n:小红

30---->自定义进程, n:小明

进程名字:小明

进程名字:小红

31---->自定义进程, n:小明

31---->自定义进程, n:小红

进程名字:小明

进程名字:小红

32---->自定义进程, n:小明

进程名字:小明

32---->自定义进程, n:小红

进程名字:小红

33---->自定义进程, n:小明

进程名字:小明

33---->自定义进程, n:小红

进程名字:小红

34---->自定义进程, n:小明

进程名字:小明

34---->自定义进程, n:小红

进程名字:小红

35---->自定义进程, n:小明

进程名字:小明

35---->自定义进程, n:小红

进程名字:小红

36---->自定义进程, n:小明

进程名字:小明

36---->自定义进程, n:小红

进程名字:小红

37---->自定义进程, n:小明

37---->自定义进程, n:小红

进程名字:小明

进程名字:小红

38---->自定义进程, n:小明

进程名字:小明

38---->自定义进程, n:小红

39---->自定义进程, n:小明

进程名字:小红

39---->自定义进程, n:小红

进程名字:小明

40---->自定义进程, n:小明

进程名字:小红

进程名字:小明

40---->自定义进程, n:小红

进程名字:小红

41---->自定义进程, n:小明

进程名字:小明

41---->自定义进程, n:小红

42---->自定义进程, n:小明

进程名字:小红

42---->自定义进程, n:小红

进程名字:小明

43---->自定义进程, n:小明

进程名字:小红

进程名字:小明

43---->自定义进程, n:小红

进程名字:小红

44---->自定义进程, n:小明

进程名字:小明

44---->自定义进程, n:小红

进程名字:小红

45---->自定义进程, n:小明

进程名字:小明

45---->自定义进程, n:小红

进程名字:小红

46---->自定义进程, n:小明

46---->自定义进程, n:小红

进程名字:小明

进程名字:小红

47---->自定义进程, n:小明

47---->自定义进程, n:小红

进程名字:小明

进程名字:小红

48---->自定义进程, n:小明

进程名字:小明

48---->自定义进程, n:小红

进程名字:小红

49---->自定义进程, n:小明

进程名字:小明

49---->自定义进程, n:小红

进程名字:小红

50---->自定义进程, n:小明

50---->自定义进程, n:小红

进程名字:小明

51---->自定义进程, n:小明

进程名字:小红

进程名字:小明

51---->自定义进程, n:小红

52---->自定义进程, n:小明

进程名字:小红

52---->自定义进程, n:小红

进程名字:小明

进程名字:小红

53---->自定义进程, n:小明

53---->自定义进程, n:小红

进程名字:小明

54---->自定义进程, n:小明

进程名字:小红

进程名字:小明

54---->自定义进程, n:小红

55---->自定义进程, n:小明

进程名字:小明

进程名字:小红

56---->自定义进程, n:小明

55---->自定义进程, n:小红

进程名字:小明

进程名字:小红

57---->自定义进程, n:小明

56---->自定义进程, n:小红

进程名字:小明

进程名字:小红

58---->自定义进程, n:小明

进程名字:小明

57---->自定义进程, n:小红

进程名字:小红

59---->自定义进程, n:小明

进程名字:小明

60---->自定义进程, n:小明

58---->自定义进程, n:小红

进程名字:小明

进程名字:小红

61---->自定义进程, n:小明

59---->自定义进程, n:小红

进程名字:小明

进程名字:小红

60---->自定义进程, n:小红

62---->自定义进程, n:小明

进程名字:小明

进程名字:小红

63---->自定义进程, n:小明

61---->自定义进程, n:小红

进程名字:小红

进程名字:小明

62---->自定义进程, n:小红

64---->自定义进程, n:小明

进程名字:小明

进程名字:小红

63---->自定义进程, n:小红

65---->自定义进程, n:小明

进程名字:小明

进程名字:小红

64---->自定义进程, n:小红

66---->自定义进程, n:小明

进程名字:小红

进程名字:小明

65---->自定义进程, n:小红

进程名字:小红

67---->自定义进程, n:小明

进程名字:小明

66---->自定义进程, n:小红

进程名字:小红

68---->自定义进程, n:小明

67---->自定义进程, n:小红

进程名字:小明

进程名字:小红

69---->自定义进程, n:小明

68---->自定义进程, n:小红

进程名字:小明

70---->自定义进程, n:小明

进程名字:小红

69---->自定义进程, n:小红

进程名字:小明

71---->自定义进程, n:小明

进程名字:小红

70---->自定义进程, n:小红

进程名字:小明

72---->自定义进程, n:小明

进程名字:小红

进程名字:小明

71---->自定义进程, n:小红

73---->自定义进程, n:小明

进程名字:小红

72---->自定义进程, n:小红

进程名字:小明

74---->自定义进程, n:小明

进程名字:小红

进程名字:小明

73---->自定义进程, n:小红

进程名字:小红

75---->自定义进程, n:小明

74---->自定义进程, n:小红

进程名字:小明

进程名字:小红

76---->自定义进程, n:小明

进程名字:小明

75---->自定义进程, n:小红

进程名字:小红

77---->自定义进程, n:小明

进程名字:小明

76---->自定义进程, n:小红

进程名字:小红

78---->自定义进程, n:小明

进程名字:小明

77---->自定义进程, n:小红

79---->自定义进程, n:小明

进程名字:小红

78---->自定义进程, n:小红

进程名字:小明

进程名字:小红

80---->自定义进程, n:小明

79---->自定义进程, n:小红

进程名字:小明

进程名字:小红

81---->自定义进程, n:小明

进程名字:小明

80---->自定义进程, n:小红

进程名字:小红

81---->自定义进程, n:小红

82---->自定义进程, n:小明

进程名字:小红

进程名字:小明

82---->自定义进程, n:小红

83---->自定义进程, n:小明

进程名字:小红

83---->自定义进程, n:小红

进程名字:小明

84---->自定义进程, n:小明

进程名字:小红

进程名字:小明

84---->自定义进程, n:小红

进程名字:小红

85---->自定义进程, n:小明

85---->自定义进程, n:小红

进程名字:小明

86---->自定义进程, n:小明

进程名字:小红

86---->自定义进程, n:小红

进程名字:小明

87---->自定义进程, n:小明

进程名字:小红

87---->自定义进程, n:小红

进程名字:小明

88---->自定义进程, n:小明

进程名字:小红

88---->自定义进程, n:小红

进程名字:小明

进程名字:小红

89---->自定义进程, n:小明

89---->自定义进程, n:小红

进程名字:小明

90---->自定义进程, n:小明

进程名字:小红

进程名字:小明

90---->自定义进程, n:小红

91---->自定义进程, n:小明

进程名字:小红

91---->自定义进程, n:小红

进程名字:小明

进程名字:小红

92---->自定义进程, n:小明

92---->自定义进程, n:小红

进程名字:小红

进程名字:小明

93---->自定义进程, n:小明

93---->自定义进程, n:小红

进程名字:小明

进程名字:小红

94---->自定义进程, n:小红

94---->自定义进程, n:小明

进程名字:小红

进程名字:小明

95---->自定义进程, n:小明

95---->自定义进程, n:小红

进程名字:小明

96---->自定义进程, n:小明

进程名字:小红

96---->自定义进程, n:小红

进程名字:小明

97---->自定义进程, n:小明

进程名字:小红

97---->自定义进程, n:小红

进程名字:小明

进程名字:小红

98---->自定义进程, n:小明

98---->自定义进程, n:小红

进程名字:小明

进程名字:小红

99---->自定义进程, n:小明

进程名字:小明

99---->自定义进程, n:小红

100---->自定义进程, n:小明

进程名字:小红

100---->自定义进程, n:小红

进程名字:小明

进程名字:小红

101---->自定义进程, n:小明

101---->自定义进程, n:小红

进程名字:小明

进程名字:小红

102---->自定义进程, n:小明

102---->自定义进程, n:小红

进程名字:小明

进程名字:小红

103---->自定义进程, n:小明

103---->自定义进程, n:小红

进程名字:小红

进程名字:小明

104---->自定义进程, n:小红

104---->自定义进程, n:小明

进程名字:小红

进程名字:小明

105---->自定义进程, n:小明

105---->自定义进程, n:小红

进程名字:小明

进程名字:小红

106---->自定义进程, n:小明

106---->自定义进程, n:小红

进程名字:小红

进程名字:小明

107---->自定义进程, n:小红

107---->自定义进程, n:小明

进程名字:小红

进程名字:小明

108---->自定义进程, n:小明

108---->自定义进程, n:小红

进程名字:小明

进程名字:小红

109---->自定义进程, n:小红

109---->自定义进程, n:小明

进程名字:小红

进程名字:小明

110---->自定义进程, n:小红

110---->自定义进程, n:小明

进程名字:小红

进程名字:小明

111---->自定义进程, n:小红

111---->自定义进程, n:小明

进程名字:小明

进程名字:小红

112---->自定义进程, n:小明

112---->自定义进程, n:小红

进程名字:小红

进程名字:小明

113---->自定义进程, n:小明

113---->自定义进程, n:小红

进程名字:小明

进程名字:小红

114---->自定义进程, n:小红

114---->自定义进程, n:小明

进程名字:小红

进程名字:小明

115---->自定义进程, n:小红

115---->自定义进程, n:小明

进程名字:小红

进程名字:小明

116---->自定义进程, n:小红

116---->自定义进程, n:小明

进程名字:小明

进程名字:小红

117---->自定义进程, n:小红

117---->自定义进程, n:小明

进程名字:小明

进程名字:小红

118---->自定义进程, n:小红

118---->自定义进程, n:小明

进程名字:小明

进程名字:小红

119---->自定义进程, n:小明

119---->自定义进程, n:小红

进程名字:小红

进程名字:小明

120---->自定义进程, n:小明

120---->自定义进程, n:小红

进程名字:小明

进程名字:小红

121---->自定义进程, n:小红

121---->自定义进程, n:小明

进程名字:小明

进程名字:小红

122---->自定义进程, n:小明

122---->自定义进程, n:小红

进程名字:小红

进程名字:小明

123---->自定义进程, n:小明

123---->自定义进程, n:小红

进程名字:小明

进程名字:小红

124---->自定义进程, n:小红

124---->自定义进程, n:小明

进程名字:小红

进程名字:小明

125---->自定义进程, n:小明

125---->自定义进程, n:小红

进程名字:小明

进程名字:小红

126---->自定义进程, n:小明

126---->自定义进程, n:小红

进程名字:小红

进程名字:小明

127---->自定义进程, n:小明

127---->自定义进程, n:小红

进程名字:小红

进程名字:小明

128---->自定义进程, n:小明

128---->自定义进程, n:小红

进程名字:小明

进程名字:小红

129---->自定义进程, n:小明

129---->自定义进程, n:小红

进程名字:小红

进程名字:小明

130---->自定义进程, n:小红

130---->自定义进程, n:小明

进程名字:小红

进程名字:小明

131---->自定义进程, n:小明

131---->自定义进程, n:小红

进程名字:小红

进程名字:小明

132---->自定义进程, n:小红

132---->自定义进程, n:小明

进程名字:小明

进程名字:小红

133---->自定义进程, n:小明

133---->自定义进程, n:小红

进程名字:小明

进程名字:小红

134---->自定义进程, n:小红

134---->自定义进程, n:小明

进程名字:小明

进程名字:小红

135---->自定义进程, n:小明

135---->自定义进程, n:小红

进程名字:小明

进程名字:小红

136---->自定义进程, n:小明

136---->自定义进程, n:小红

进程名字:小明

进程名字:小红

137---->自定义进程, n:小红

137---->自定义进程, n:小明

进程名字:小明

进程名字:小红

138---->自定义进程, n:小明

138---->自定义进程, n:小红

进程名字:小红

139---->自定义进程, n:小红

进程名字:小明

139---->自定义进程, n:小明

进程名字:小红

进程名字:小明

140---->自定义进程, n:小红

140---->自定义进程, n:小明

进程名字:小红

进程名字:小明

141---->自定义进程, n:小红

进程名字:小红

141---->自定义进程, n:小明

进程名字:小明

142---->自定义进程, n:小红

142---->自定义进程, n:小明

进程名字:小红

进程名字:小明

143---->自定义进程, n:小红

143---->自定义进程, n:小明

进程名字:小红

144---->自定义进程, n:小红

进程名字:小明

进程名字:小红

144---->自定义进程, n:小明

145---->自定义进程, n:小红

进程名字:小明

145---->自定义进程, n:小明

进程名字:小红

进程名字:小明

146---->自定义进程, n:小红

146---->自定义进程, n:小明

进程名字:小红

147---->自定义进程, n:小红

进程名字:小明

147---->自定义进程, n:小明

进程名字:小红

进程名字:小明

148---->自定义进程, n:小明

148---->自定义进程, n:小红

进程名字:小红

进程名字:小明

149---->自定义进程, n:小红

149---->自定义进程, n:小明

进程名字:小明

进程名字:小红

150---->自定义进程, n:小红

150---->自定义进程, n:小明

进程名字:小明

进程名字:小红

151---->自定义进程, n:小红

151---->自定义进程, n:小明

进程名字:小红

进程名字:小明

152---->自定义进程, n:小红

152---->自定义进程, n:小明

进程名字:小红

进程名字:小明

153---->自定义进程, n:小红

153---->自定义进程, n:小明

进程名字:小红

进程名字:小明

154---->自定义进程, n:小红

154---->自定义进程, n:小明

进程名字:小明

进程名字:小红

155---->自定义进程, n:小红

155---->自定义进程, n:小明

进程名字:小明

进程名字:小红

156---->自定义进程, n:小明

156---->自定义进程, n:小红

进程名字:小明

进程名字:小红

157---->自定义进程, n:小明

157---->自定义进程, n:小红

进程名字:小明

进程名字:小红

158---->自定义进程, n:小明

158---->自定义进程, n:小红

进程名字:小明

159---->自定义进程, n:小明

进程名字:小红

159---->自定义进程, n:小红

进程名字:小明

160---->自定义进程, n:小明

进程名字:小红

进程名字:小明

160---->自定义进程, n:小红

进程名字:小红

161---->自定义进程, n:小明

进程名字:小明

161---->自定义进程, n:小红

162---->自定义进程, n:小明

进程名字:小红

进程名字:小明

162---->自定义进程, n:小红

163---->自定义进程, n:小明

进程名字:小明

进程名字:小红

164---->自定义进程, n:小明

163---->自定义进程, n:小红

进程名字:小明

进程名字:小红

165---->自定义进程, n:小明

进程名字:小明

164---->自定义进程, n:小红

166---->自定义进程, n:小明

进程名字:小红

165---->自定义进程, n:小红

进程名字:小明

进程名字:小红

167---->自定义进程, n:小明

166---->自定义进程, n:小红

进程名字:小明

168---->自定义进程, n:小明

进程名字:小红

167---->自定义进程, n:小红

进程名字:小明

169---->自定义进程, n:小明

进程名字:小红

168---->自定义进程, n:小红

进程名字:小明

进程名字:小红

170---->自定义进程, n:小明

169---->自定义进程, n:小红

进程名字:小明

进程名字:小红

171---->自定义进程, n:小明

进程名字:小明

170---->自定义进程, n:小红

进程名字:小红

172---->自定义进程, n:小明

171---->自定义进程, n:小红

进程名字:小明

进程名字:小红

172---->自定义进程, n:小红

173---->自定义进程, n:小明

进程名字:小明

进程名字:小红

174---->自定义进程, n:小明

173---->自定义进程, n:小红

进程名字:小红

进程名字:小明

175---->自定义进程, n:小明

174---->自定义进程, n:小红

进程名字:小明

进程名字:小红

175---->自定义进程, n:小红

176---->自定义进程, n:小明

进程名字:小明

进程名字:小红

177---->自定义进程, n:小明

176---->自定义进程, n:小红

进程名字:小明

进程名字:小红

177---->自定义进程, n:小红

178---->自定义进程, n:小明

进程名字:小红

进程名字:小明

179---->自定义进程, n:小明

178---->自定义进程, n:小红

进程名字:小红

进程名字:小明

180---->自定义进程, n:小明

179---->自定义进程, n:小红

进程名字:小明

181---->自定义进程, n:小明

进程名字:小红

180---->自定义进程, n:小红

进程名字:小明

进程名字:小红

182---->自定义进程, n:小明

进程名字:小明

181---->自定义进程, n:小红

进程名字:小红

183---->自定义进程, n:小明

182---->自定义进程, n:小红

进程名字:小明

184---->自定义进程, n:小明

进程名字:小红

进程名字:小明

183---->自定义进程, n:小红

185---->自定义进程, n:小明

进程名字:小红

进程名字:小明

184---->自定义进程, n:小红

186---->自定义进程, n:小明

进程名字:小红

185---->自定义进程, n:小红

进程名字:小明

进程名字:小红

187---->自定义进程, n:小明

186---->自定义进程, n:小红

进程名字:小明

进程名字:小红

188---->自定义进程, n:小明

187---->自定义进程, n:小红

进程名字:小明

进程名字:小红

189---->自定义进程, n:小明

188---->自定义进程, n:小红

进程名字:小明

进程名字:小红

189---->自定义进程, n:小红

190---->自定义进程, n:小明

进程名字:小红

进程名字:小明

190---->自定义进程, n:小红

191---->自定义进程, n:小明

进程名字:小明

进程名字:小红

192---->自定义进程, n:小明

191---->自定义进程, n:小红

进程名字:小明

进程名字:小红

192---->自定义进程, n:小红

193---->自定义进程, n:小明

进程名字:小明

进程名字:小红

194---->自定义进程, n:小明

193---->自定义进程, n:小红

进程名字:小明

进程名字:小红

194---->自定义进程, n:小红

195---->自定义进程, n:小明

进程名字:小红

进程名字:小明

196---->自定义进程, n:小明

195---->自定义进程, n:小红

进程名字:小明

197---->自定义进程, n:小明

进程名字:小红

196---->自定义进程, n:小红

进程名字:小明

198---->自定义进程, n:小明

进程名字:小红

197---->自定义进程, n:小红

进程名字:小明

进程名字:小红

199---->自定义进程, n:小明

进程名字:小明

198---->自定义进程, n:小红

进程名字:小红

200---->自定义进程, n:小明

进程名字:小明

199---->自定义进程, n:小红

201---->自定义进程, n:小明

进程名字:小红

200---->自定义进程, n:小红

进程名字:小明

进程名字:小红

202---->自定义进程, n:小明

201---->自定义进程, n:小红

进程名字:小明

进程名字:小红

203---->自定义进程, n:小明

202---->自定义进程, n:小红

进程名字:小明

204---->自定义进程, n:小明

进程名字:小红

203---->自定义进程, n:小红

进程名字:小明

进程名字:小红

205---->自定义进程, n:小明

204---->自定义进程, n:小红

进程名字:小明

206---->自定义进程, n:小明

进程名字:小红

205---->自定义进程, n:小红

进程名字:小明

207---->自定义进程, n:小明

进程名字:小红

206---->自定义进程, n:小红

进程名字:小明

进程名字:小红

208---->自定义进程, n:小明

207---->自定义进程, n:小红

进程名字:小明

Process 小红:

Process 小明:

Traceback (most recent call last):

KeyboardInterrupt

#如果子进程的数量不多的时候,可以使用multiprocessing中的Process来动态生成多个进程

# 如果需要成千上完的目标,就需要用multiprocessing模块的Pool方法

#

#初始化Pool时候,可以指定一个最大进程数,当有新的请求提交到

#Pool时候,如果Pool没有满,哪儿就会创建一个新的进程来执行该请求

#如果Pool已经满了,那么该请求就会等待,直到Pool中有进程结束,才会创建新的进程来执行

from multiprocessing import Pool

import time

from random import random

def task(task_name):

print("开始做任务 ",task_name)

start = time.time()

#睡眠几秒钟

time.sleep(random()*2)

end = time.time()

print("完成任务, 用时:",(end-start))

if __name__ == "__main__":

pool = Pool(5)

tasks = ["吃饭","睡觉","看手机","打游戏","送手机"]

for task1 in tasks:

pool.apply_async(task, args=(task1,))

pool.close() #添加任务结束

pool.join() #堵住主进程,不执行下面的print语句,直到子进程结束,才会执行下面的主进程print语句

print("over")

开始做任务 吃饭

开始做任务 送手机

开始做任务 睡觉

开始做任务 打游戏

开始做任务 看手机

完成任务, 用时: 1.4287302494049072

完成任务, 用时: 1.8290107250213623

完成任务, 用时: 1.8619880676269531

完成任务, 用时: 1.8805663585662842

完成任务, 用时: 2.00169038772583

over

random() #random.random()会得到0-1之间的一个小数

0.5553077792159044

def task(task_name):

print("开始做任务 ",task_name)

start = time.time()

#睡眠几秒钟

time.sleep(random()*2)

end = time.time()

print("完成任务, 用时:",(end-start))

if __name__ == "__main__":

pool = Pool(5)

tasks = ["吃饭","睡觉","看手机","打游戏","送手机"]

for task1 in tasks:

pool.apply_async(task, args=(task1,))

pool.close() #添加任务结束

#pool.join() #堵住主进程,不执行下面的print语句,直到子进程结束,才会执行下面的主进程print语句

print("over") #如果不加上面的pool.join(),那么会首先打印出over这句话,之后再执行各个task

over

开始做任务 看手机

开始做任务 打游戏

开始做任务 睡觉

开始做任务 送手机

开始做任务 吃饭

完成任务, 用时: 0.27217555046081543

完成任务, 用时: 0.3936333656311035

完成任务, 用时: 0.8289740085601807

完成任务, 用时: 0.9655370712280273

完成任务, 用时: 1.4926941394805908

import os

def task(task_name):

print("开始做任务 ",task_name)

start = time.time()

#睡眠几秒钟

time.sleep(random()*2)

end = time.time()

print("完成任务: {}, 用时{}, 进程id{}".format(task_name,(end-start), os.getpid()))

if __name__ == "__main__":

pool = Pool(5)

tasks = ["吃饭","睡觉","看手机","打游戏","送手机","散步"]

for task1 in tasks:

pool.apply_async(task, args=(task1,))

pool.close() #添加任务结束

pool.join() #堵住主进程,不执行下面的print语句,直到子进程结束,才会执行下面的主进程print语句

print("over")

开始做任务 睡觉

开始做任务 吃饭

开始做任务 打游戏

开始做任务 看手机

开始做任务 送手机

完成任务: 吃饭, 用时0.8535048961639404, 进程id16618

开始做任务 散步

完成任务: 散步, 用时0.16600275039672852, 进程id16618

完成任务: 睡觉, 用时1.4405558109283447, 进程id16619

完成任务: 送手机, 用时1.5230963230133057, 进程id16622

完成任务: 打游戏, 用时1.5314967632293701, 进程id16621

完成任务: 看手机, 用时1.7721624374389648, 进程id16620

over

#当pool中的进程执行完毕此次任务后,

#则队列中的任务再加入这个进程

#实现了进程复用

def task(task_name):

print("开始做任务 ",task_name)

start = time.time()

#睡眠几秒钟

time.sleep(random()*2)

end = time.time()

return "完成任务: {}, 用时{}, 进程id{}".format(task_name,(end-start), os.getpid())

container = []

def callback_func(n):

container.append(n)

if __name__ == "__main__":

pool = Pool(5)

tasks = ["吃饭","睡觉","看手机","打游戏","送手机","散步"]

for task1 in tasks:

pool.apply_async(task, args=(task1,), callback=callback_func)

pool.close() #添加任务结束

pool.join() #堵住主进程,不执行下面的print语句,直到子进程结束,才会执行下面的主进程print语句

# for c in container:

# print(c)

print("over")

开始做任务 打游戏

开始做任务 看手机

开始做任务 吃饭

开始做任务 睡觉

开始做任务 送手机

开始做任务 散步

over

def task(task_name):

print("开始做任务 ",task_name)

start = time.time()

#睡眠几秒钟

time.sleep(random()*2)

end = time.time()

return "完成任务: {}, 用时{}, 进程id{}".format(task_name,(end-start), os.getpid())

container = []

#这里的参数n,就是task所return的内容

def callback_func(n):

container.append(n)

if __name__ == "__main__":

pool = Pool(5)

tasks = ["吃饭","睡觉","看手机","打游戏","送手机","散步"]

#进程每执行完一个task,该task就会去执行回调函数

for task1 in tasks:

pool.apply_async(task, args=(task1,), callback=callback_func)

pool.close() #添加任务结束

#当pool中没有任务了, 那么pool中为空, 那么这堵墙就没有了, 就可以执行主进程下面的语句了

pool.join() #堵住主进程,不执行下面的print语句,直到子进程结束,才会执行下面的主进程print语句

#循环打印出container中的语句

#在pool.apply_async()语句中,使用了回调函数,使得执行task后的return内容

#返回到了 callback_func()函数中, 而callback_func()函数是使用的一个list来接受返回的内容

#现在等到所有的进程执行完毕,就可以打印出来了

for c in container:

print(c)

print("over")

开始做任务 睡觉

开始做任务 吃饭

开始做任务 打游戏

开始做任务 送手机

开始做任务 看手机

开始做任务 散步

完成任务: 吃饭, 用时0.16063594818115234, 进程id19475

完成任务: 送手机, 用时0.5520751476287842, 进程id19479

完成任务: 打游戏, 用时0.666292667388916, 进程id19478

完成任务: 睡觉, 用时0.6702499389648438, 进程id19476

完成任务: 散步, 用时1.2905476093292236, 进程id19475

完成任务: 看手机, 用时1.9815318584442139, 进程id19477

over

#pool()方法可以实现指定进程数, 同时进程可以复用

#非阻塞式: 全部添加到队列中,立刻返回,

#并没有等到其它的进程执行完毕,但是回调函数是等待任务完成之后再执行

#从上述的显示结果可以看出,"散步"这个task做完后,再去执行的回调函数

# callback = callback_func()函数

#阻塞式 pool.apply(),等pool里面的进程执行完毕后,再加载另一个task

def task(task_name):

print("开始做任务 ",task_name)

start = time.time()

#睡眠几秒钟

time.sleep(random()*2)

end = time.time()

print("完成任务: {}, 用时{}, 进程id{}".format(task_name,(end-start), os.getpid()))

if __name__ == "__main__":

pool = Pool(5)

tasks = ["吃饭","睡觉","看手机","打游戏","送手机","散步"]

for task1 in tasks:

#阻塞式 pool.apply(),等pool里面的进程执行完毕后,再加载另一个task

#效率低下, 没有体现进程的复用特点

pool.apply(task, args=(task1,))

pool.close() #添加任务结束,停止往pool里面加载

#当pool中没有任务了, 那么pool中为空, 那么这堵墙就没有了, 就可以执行主进程下面的语句了

#pool中的子进程没有结束前,主进程要等待,不能向下继续执行

pool.join() #堵住主进程,不执行下面的print语句,直到子进程结束,才会执行下面的主进程print语句

print("over")

开始做任务 吃饭

完成任务: 吃饭, 用时0.010351181030273438, 进程id22763

开始做任务 睡觉

完成任务: 睡觉, 用时0.816246509552002, 进程id22764

开始做任务 看手机

完成任务: 看手机, 用时0.6943869590759277, 进程id22765

开始做任务 打游戏

完成任务: 打游戏, 用时0.555044412612915, 进程id22766

开始做任务 送手机

完成任务: 送手机, 用时1.7695050239562988, 进程id22767

开始做任务 散步

完成任务: 散步, 用时0.650540828704834, 进程id22763

over

#阻塞式任务的特点

添加一个任务,则执行一个任务,如果一个任务不结束,那么另一个任务就进不来

#进程池

pool = Pool(max) 创建进程对象池

pool.apply() 阻塞的

pool.apply_async() 非阻塞的

pool.close() 停止添加进程、

pool.join() 让主进程让步,直到执行完子进程的任务, 再回来执行主进程

#进程间的通信

#队列 Queue

#导入队列Queue

from queue import Queue

q = Queue(3)

q.put('A')

q.put('B')

q.put("C")

print(q.qsize())

#如果queue满了则只能等待,除非有空地 则添加成功

#q.put('d')

3

#进程间的通信

#队列 Queue

#导入队列Queue

from queue import Queue

q = Queue(3)

q.put('A')

q.put('B')

q.put("C")

print(q.qsize())

#如果queue满了则只能等待,除非有空地 则添加成功

#q.full()判断队列q是否满, 如果满,则返回True,否则返回False

#q.empty()判断队列q是否为空, 如果为空,则返回True,否则返回False

if not q.full():

q.put("F", timeout=1)

else:

print("q.full() is True")

3

q.full() is True

#进程间的通信

#队列 Queue

#导入队列Queue

from queue import Queue

q = Queue(3)

q.put('A')

q.put('B')

q.put("C")

print(q.qsize())

#如果queue满了则只能等待,除非有空地 则添加成功

if not q.full():

q.put("F", timeout=1)

else:

print("q.full() is True")

print(q.get())

print(q.get())

print(q.get())

#q.get()可以设置一个关键字参数timeout,表示在设定的timeout时间内

#如果没有获取到数值,那么就报错

print(q.get(timeout=1))

3

q.full() is True

A

B

C

---------------------------------------------------------------------------

Empty Traceback (most recent call last)

in ()

22 print(q.get())

23 print(q.get())

---> 24 print(q.get(timeout=1))

~/anaconda3/lib/python3.6/queue.py in get(self, block, timeout)

170 remaining = endtime - time()

171 if remaining <= 0.0:

--> 172 raise Empty

173 self.not_empty.wait(remaining)

174 item = self._get()

Empty:

#进程间通信

from multiprocessing import Process

import time

from queue import Queue

def download(q):

images = ["girl.jpg","boy.jpg","man.jpg"]

for img in images:

print("正在下载:", img)

time.sleep(0.5)

q.put(img) #往队列q里面放东西

def getfile(q):

while True:

try:

#设置超时时间,当超过了超时时间, 就会报错,

#进入except 分支,执行break跳出while循环

file_name = q.get(timeout=1)

print("{}保存成功".format(file_name))

except Exception as e:

print(e)

break

if __name__ == "__main__":

q = Queue(5)

p1 = Process(target = download(q))

p2 = Process(target = getfile(q))

p1.start() #进程p1是向队列q中放数据, q.put()

p1.join()

p2.start() #进程p2是向队列q中取数据, q.get(timeout=1)

p2.join() #这两个进程共用同一个队列数据

正在下载: girl.jpg

正在下载: boy.jpg

正在下载: man.jpg

girl.jpg保存成功

boy.jpg保存成功

man.jpg保存成功

python求15 17 23 65 97的因数_Python学习记录15相关推荐

  1. python求15 17 23 65 97的因数_笨方法学python,Lesson15,16,17

    Exercise 15 代码 from sys import argv script, filename = argv txt = open(filename) print "Here is ...

  2. python求15的因数_python学习第15期

    一.数字的处理与判断 题目描述 给出一个不多于5位的整数,要求 1.求出它是几位数 2.分别输出每一位数字 3.按逆序输出各位数字,例如原数为321,应输出123 输入 一个不大于5位的数字 输出 三 ...

  3. python小括号报错_Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  4. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

  5. python求n的阶乘并输出身份信息_python编程求n的阶乘_使用Python编程的阶乘

    python编程求n的阶乘 Before we start implementing factorial using Python, let us first discuss what factori ...

  6. python求13号是星期几的次数_Python简单计算给定某一年的某一天是星期几示例

    本文实例讲述了Python简单计算给定某一年的某一天是星期几.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #计算某特定天使星期几 #蔡勒公式:w=y+[y/4]+[ ...

  7. python求两个数的最大公约数和最小公倍数_Python求两个数最大公约数、最小公倍数...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. python求13号是星期几的次数_Python简单计算给定某一年的某一天是星期几的教程...

    本文实例讲述了Python简单计算给定某一年的某一天是星期几.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #计算某特定天使星期几 #蔡勒公式:w=y+[y/4]+[ ...

  9. python求五个数中的最大值和最小值_python编程 求输入的10个数中的最大值和最小值,并输出它们各自是第几个...

    展开全部 importjava.util.ArrayList:e68a84e8a2ad3231313335323631343130323136353331333431373266 importjava ...

  10. 23年5月高项学习笔记15 —— 配置与变更

    配置 CMDB: 配置管理库 配置项的操作权限应该有配置管理员CMO严格管理 基线配置项向开发人员开放读取权限 非基线配置项向项目经理.CCB以及相关人员开放: 配置项状态 草稿 -> 评审后 ...

最新文章

  1. zabbix之微信告警(python版):微信个人报警,微信企业号告警脚本
  2. js进阶 12-1 jquery的鼠标事件有哪些
  3. 解决 No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi 的问题
  4. 使用http连接到microsoft exchange_如何使用 PowerShell 连接 Office 365 服务
  5. 你能抱我一下,好吗?
  6. bootstrap ace admin 整合java HTML5
  7. 万人马拉松,人脸识别系统如何又快又准完成校验?
  8. 2021.09.27 MySQL笔记
  9. Enterprise Library v5.0 -- Data Access Application Block 开发向导(2)
  10. 脚本录制软件python 按键精灵 tc_Keymouse Go鼠标键盘脚本录制下载|开源版按键精灵软件_最火软件站...
  11. MapGuide 安装
  12. Z-TEK USB转422接口问题 RS422接口常见使用注意事项
  13. 大厂都搞不定的安全难题,被这家初创公司破解了!
  14. 基于Springboot实现英语在线学习系统
  15. java中文转英文_eclipse英文转中文怎么设置 eclipse中英文切换图文教程
  16. php 抽奖系统源码下载,魔众砸金蛋抽奖系统PHP源码 v2.0.0
  17. 一个屌丝程序猿的人生(三)
  18. 上海拍牌服务器协议,上海拍牌服务器地址
  19. Transformer+异常检测论文解读
  20. Android 系统简单介绍

热门文章

  1. 我是如何搭建一台家庭NAS的
  2. 群晖NAS设备MIB手册
  3. word文档打对勾_word文档怎么打勾 word文档方框内打勾六种方法介绍
  4. 台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接
  5. 生成开端原著小说词云
  6. 微信聊天记录导出和年度报告制作小软件
  7. 挖矿病毒入侵服务器(没有解决,重置服务器了)
  8. Guava: Joiner
  9. Softing dataFEED系列--将现场设备集成到西门子工业物联网解决方案
  10. K3默认序时簿是不体现即时库存的,如果需要在序时簿将物料的即时库存数据带入,可以按照下方的步骤实现: