VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python基础(32):进程(二)(3)

)
  • p2=Process(target=bar)
  •  
  • p1.daemon=True
  • p1.start()
  • p2.start()
  • time.sleep(0.1)
  • print("main-------")#打印该行则主进程代码结束,则守护进程p1应该被终止.#可能会有p1任务执行的打印信息123,因为主进程打印main----时,p1也执行了,但是随即被终止.
  • 1.1.4 socket聊天并发实例

    server:

    
    						
    1. from socket import *
    2. from multiprocessing import Process
    3.  
    4. server=socket(AF_INET,SOCK_STREAM)
    5. server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    6. server.bind(('127.0.0.1',8080))
    7. server.listen(5)
    8.  
    9. def talk(conn,client_addr):
    10. while True:
    11. try:
    12. msg=conn.recv(1024)
    13. if not msg:break
    14. conn.send(msg.upper())
    15. except Exception:
    16. break
    17.  
    18. if __name__ == '__main__': #windows下start进程一定要写到这下面
    19. while True:
    20. conn,client_addr=server.accept()
    21. p=Process(target=talk,args=(conn,client_addr))
    22. p.start()

    client:

    
    						
    1. from socket import *
    2.  
    3. client=socket(AF_INET,SOCK_STREAM)
    4. client.connect(('127.0.0.1',8080))
    5.  
    6.  
    7. while True:
    8. msg=input('>>: ').strip()
    9. if not msg:continue
    10.  
    11. client.send(msg.encode('utf-8'))
    12. msg=client.recv(1024)
    13. print(msg.decode('utf-8'))

    1.1.5 多进程中的其他方法

    进程对象的其他方法:terminate,is_alive:

    
    						
    1. from multiprocessing import Process
    2. import time
    3. import random
    4.  
    5. class Myprocess(Process):
    6. def __init__(self,person):
    7. self.name=person
    8. super().__init__()
    9.  
    10. def run(self):
    11. print('%s正在和网红脸聊天' %self.name)
    12. time.sleep(random.randrange(1,5))
    13. print('%s还在和网红脸聊天' %self.name)
    14.  
    15. p1=Myprocess('哪吒')
    16. p1.start()
    17.  
    18. p1.terminate()#关闭进程,不会立即关闭,所以is_alive立刻查看的结果可能还是存活
    19. print(p1.is_alive()) #结果为True
    20.  
    21. print('开始')
    22. print(p1.is_alive()) #结果为False

    进程对象的其他属性:pid和name:

    
    						
    1. class Myprocess(Process):
    2. def __init__(self,person):
    3. self.name=person # name属性是Process中的属性,标示进程的名字
    4. super().__init__() # 执行父类的初始化方法会覆盖name属性
    5. #self.name = person # 在这里设置就可以修改进程名字了
    6. #self.person = person #如果不想覆盖进程名,就修改属性名称就可以了
    7. def run(self):
    8. print('%s正在和网红脸聊天' %self.name)
    9. # print('%s正在和网红脸聊天' %self.person)
    10. time.sleep(random.randrange(1,5))
    11. print('%s正在和网红脸聊天' %self.name
    
    相关教程