美文网首页程序员
进程和线程(2)

进程和线程(2)

作者: 梦捷者 | 来源:发表于2018-12-17 15:03 被阅读4次

    (一)进程和线程的标识

            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)

        本文链接:https://www.haomeiwen.com/subject/qswqkqtx.html