(一)进程和线程的标识
1、进程标识符 (1)进程pid:操作系统为每一个管理的进程分配一个独一无二的序号,这个序号就是pid。 (2)进程名:进程名仅仅在打印输出的时候用来显示,完全没有其他的意义;如果不给进程起名字的话,系统就会自动给进程命名为process-1,process-2.......process-n。 (3)os.getpid()——获取当前进程的pid;os.getppid——获取父进程的pid 2、线程标识符 (1)主线程:在任何进程中,默认会启动一个线程,这个线程就是主线程。 (2)线程id和线程名 a、python的threading模块中的current_thread()函数,它返回的是当前线程的实例。 b、main_thread()函数返回的是当前线程的主线程。 c、ident用来获取线程实例的id。
(二)多进程和多线程的同步
1、守护模式 (1)daeman默认为False,当为True的时候代表守护模式(运行完毕并非是终止运行) ( 2 ) 对于进程来说,运行完毕指的是父进程的代码运行完毕。 (3)对于主线程来说,运行完毕指主线程所在的进程里的所有非守护线程全部执行完毕,主线程才算执行完毕。 2、等待模式 join()方法,可以使父进程(主线程)等待子进程(子线程)执行完毕后,再往下进行执行。
代码实例:
import time
import os
from multiprocessing import Process
def child_ process_task(name):
time.sleep(5)
ptint('我是子进程%s,id是%s,我的父进程id是%s'%(name,os.getpid(),os.getppid()))
if __name__=='__main__':
print('我是父进程,id是:%s'%(os.getpid()))
c_p=Process(target=child_ process_task,args=('test',))
c_p.daemon=True
c_p.start()
c_p.join()
print('父进程结束')
(三)以面向对象的形式使用进程和线程
步骤:1、继承process 2、实现run方法
代码实例:以面向对象的方式写一个多进程的服务端(线程也是一样的方式)
from multiprocessing import Process
import socket
class myProcess(Process):
def __init__(self,sock):
Process.__init__(self)
self.sock=sock
def run(self):
while True:
recv_data=self.sock.recv(1024)
if recv_data:
print(recv_data.decode())
self.sock.send(recv_data)
else:
break
self.sock.close()
if __name__=='__main__':
sever=socket.socket()
server.bind((' ',端口号))
sever.listen(1000)
while True:
conn,adrr=server.accept()
p=myProcess(conn)
网友评论