进程和线程2(五)

(一)进程和线程的标识

        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)

                            

                         

你可能感兴趣的:(进程和线程2(五))