进程和线程概述
进程:对于操作系统来说,一个任务就是一个进程(Process)
线程:在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。
进程
1
multprocessing # Python 中的 multiprocess 包提供了多进程支持
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#process multprocessing包中的一个类表示进程对象
from multiprocessing import Process
from tqdm import tqdm
import os
# 子进程要执行的代码
def run_proc(name):
print('Run child process %s (%s)...' % (name, os.getpid())) #getpid()可以拿到进程的ID。
for i in tqdm(range(10000000)):
pass
if __name__=='__main__':
'''
有化部分 ,这句代码以上的部分,可以被其它的调用,以下的部分只有这个文件自己可以看见,如果文件被调用了,其他人是无法看见私有化部分的
也就是说你自己运行该模块的时候 这句话是执行的 因为自己运行时__name__就是__main__,而当别人调用你这个模块时,以下代码会被忽略,此时的__name__是模块名
'''
print('Parent process %s.' % os.getpid())
p = Process(target=run_proc, args=('test1',))
d = Process(target=run_proc, args=('test2',))
print('Child process will start.')
p.start()#调用进程
d.start()#调用进程
p.join()#join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步
d.join()
print('Child process end.')
1 | #Pool multprocessing包中的一个类,如果要启动大量的子进程,可以用进程池的方式批量创建子进程: |
1 | #这种方法可以实现任意进程间的通信,这里写的是主、子进程间的通信 |
线程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:
import time, threading
# 新线程执行的代码:
def loop():
print('thread %s is running...' % threading.current_thread().name)
n = 0
while n < 5:
n = n + 1
print('thread %s >>> %s' % (threading.current_thread().name, n))
time.sleep(1)
print('thread %s ended.' % threading.current_thread().name)
print('thread %s is running...' % threading.current_thread().name)
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print('thread %s ended.' % threading.current_thread().name)