Skip to content

Commit 09c0378

Browse files
author
mohyeah
committed
24/12/14 learning~~
1 parent cdab590 commit 09c0378

6 files changed

Lines changed: 171 additions & 1 deletion

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# 创建进程:
2+
# 1. 导入进程模块
3+
import multiprocess
4+
import time
5+
6+
def music(times, t):
7+
for i in range(times):
8+
print("listening music")
9+
time.sleep(t)
10+
11+
def coding(t):
12+
for i in range(3):
13+
print("coding")
14+
time.sleep(t)
15+
16+
def main():
17+
# 2. 创建子进程
18+
p1 = multiprocess.Process(target=music, args=(3,0.2)) # 元组方式传参, 要和参数顺序保持一致
19+
p2 = multiprocess.Process(target=coding, kwargs={'t': 0.2}) # 字典方式传参, key和参数名保持一致
20+
21+
# 3. 启动进程
22+
p1.start()
23+
p2.start()
24+
# 4. 等待进程执行完毕
25+
p1.join()
26+
p2.join()
27+
28+
print("主进程结束")
29+
30+
if __name__ == '__main__':
31+
main()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# 多任务: 并发, 并行
2+
# 并发: 多个任务同时执行(一段时间内交替进行)
3+
# 并行: 多个任务同时执行(一段时间内同时进行, 任务数<CPU数)
4+
# 进程: 运行一个程序的一个实例, 系统进行资源分配的基本单位, 进程一个进程可以有多个线程
5+
# 线程: 同一个进程内的资源分配的最小单位
6+
7+
# 创建进程:
8+
# 1. 导入进程模块
9+
import multiprocess
10+
import time
11+
12+
def music():
13+
for i in range(3):
14+
print("listening music")
15+
time.sleep(0.2)
16+
17+
def coding():
18+
for i in range(3):
19+
print("coding")
20+
time.sleep(0.2)
21+
22+
def main():
23+
# 2. 创建子进程
24+
p1 = multiprocess.Process(target=music)
25+
p2 = multiprocess.Process(target=coding)
26+
27+
# 3. 启动进程
28+
p1.start()
29+
p2.start()
30+
# 4. 等待进程执行完毕
31+
p1.join()
32+
p2.join()
33+
34+
print("the end")
35+
36+
if __name__ == '__main__':
37+
main()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import os
2+
3+
pid = eval(input("请输入进程编号: "))
4+
os.kill(pid, 9) # pid 进程编号
5+
# signal 信号, 与操作系统有关, 9为强制杀死进程, 15为正常结束进程
6+
7+
print("进程:{} is killed".format(pid))
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import os
2+
import multiprocessing
3+
import time
4+
5+
# 获取当前进程编号
6+
7+
def work():
8+
print("executing the work")
9+
10+
# 方法1: os.getpid()
11+
12+
pid = os.getpid() # 获取当前进程编号
13+
print("work子进程编号:{}".format(pid))
14+
15+
ppid = os.getppid() # 获取父进程编号
16+
print("当前进程父进程编号:{}".format(ppid))
17+
time.sleep(20)
18+
19+
if __name__ == '__main__':
20+
print("主进程编号:{}".format(os.getpid()))
21+
sub_process = multiprocessing.Process(target=work)
22+
sub_process.start()
23+
24+
25+
26+
'''
27+
#方法2: multiprocess.current_process()
28+
pid = multiprocessing.current_process().pid
29+
print(pid)
30+
time.sleep(29)
31+
'''
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# 1. 进程间独立, 全局变量不互通 (父进程和子进程是独立的, 但是主进程中的全局变量是共享的)
2+
# 2. 主进程默认不会等待子进程结束再结束, 当主进程直接结束, 子进程可能还在执行
3+
4+
import multiprocessing
5+
6+
# 创建一个全局变量(主进程中的全局变量)(主进程中的资源)
7+
my_list = []
8+
9+
def write_data():
10+
for i in range(3):
11+
my_list.append(i)
12+
print("add:",i)
13+
print("write_data:{}".format(my_list))
14+
15+
def read_data():
16+
print("read_data:{}".format(my_list))
17+
18+
def main():
19+
p1 = multiprocessing.Process(target=write_data) # 创建子进程, copy一份主进程中的资源
20+
# 对自己进程中的资源进行操作
21+
p2 = multiprocessing.Process(target=read_data) # 创建子进程, copy一份主进程中的资源
22+
# 对自己进程中的资源进行操作
23+
24+
p1.start()
25+
p2.start()
26+
27+
# 设置守护进程
28+
# p1.daemon = True # 设置为守护进程, 主进程结束, 子进程也结束
29+
# p2.daemon = True # 设置守护进程
30+
31+
# 在主进程结束前, 强制销毁所有子进程
32+
#p1.terminate()
33+
#p2.terminate()
34+
35+
# 等待子进程终止
36+
p1.join()
37+
p2.join()
38+
39+
print("主进程结束")
40+
41+
if __name__ == '__main__':
42+
main()

AI Learn/Stage 2 Python Advanced/Chapter 1 Python Advanced Programing/2.1-2 装饰器.ipynb

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,13 +389,35 @@
389389
],
390390
"execution_count": 8
391391
},
392+
{
393+
"metadata": {
394+
"ExecuteTime": {
395+
"end_time": "2024-12-14T10:52:38.184335Z",
396+
"start_time": "2024-12-14T10:52:38.149720Z"
397+
}
398+
},
399+
"cell_type": "code",
400+
"source": "",
401+
"id": "6e9c5cf78dd6ff2c",
402+
"outputs": [
403+
{
404+
"name": "stdout",
405+
"output_type": "stream",
406+
"text": [
407+
"executing the program\n",
408+
"2\n"
409+
]
410+
}
411+
],
412+
"execution_count": 1
413+
},
392414
{
393415
"metadata": {},
394416
"cell_type": "code",
395417
"outputs": [],
396418
"execution_count": null,
397419
"source": "",
398-
"id": "6e9c5cf78dd6ff2c"
420+
"id": "d4a3bf0e985209af"
399421
}
400422
],
401423
"metadata": {

0 commit comments

Comments
 (0)