• 4.1


    1.思考开启进程的方式一和方式二各开启了几个进程?
    开启进程有两种方式,Process(),自定义类继承(Process),开启个数是一样的
    2.进程之间的内存空间是共享的还是隔离的?下述代码的执行结果是什么?
    隔离的
     1 from multiprocessing import Process
     2 n=100 #在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了
     3 def work():
     4     global n
     5     n=0
     6     print('子进程内: ',n)
     7 
     8 if __name__ == '__main__':
     9     p=Process(target=work)
    10     p.start()
    11     p.join()
    12     print('主进程内: ',n)
    13 """
    14 子进程内:  0
    15 主进程内:  100
    16 """
    3.基于多进程实现并发的套接字通信?
    server:
     1 # -*- coding:utf-8 -*-
     2 import socket
     3 from multiprocessing import Process
     4 
     5 def task(conn):
     6     while True:
     7         try:
     8             data = conn.recv(1024)
     9             if not data:continue
    10             conn.send(data.upper())
    11         except Exception:
    12             break
    13     conn.close()
    14 
    15 def server(ip,port):
    16     server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    17     server.bind((ip,port))
    18     server.listen(5)
    19     while True:
    20         conn,client_addr=server.accept()
    21         p = Process(target=task,args=(conn,))
    22         p.start()
    23     server.close()
    24 
    25 if __name__ == "__main__":
    26     server('127.0.0.1',8080)
    client:
     1 # -*- coding:utf-8 -*-
     2 import socket
     3 
     4 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     5 client.connect(('127.0.0.1',8080))
     6 while True:
     7     msg = input('>>>:').strip()
     8     if not msg:continue
     9     client.send(msg.encode('utf-8'))
    10     data = client.recv(1024)
    11     print(data.decode('utf-8'))
    4.思考每来一个客户端,服务端就开启一个新的进程来服务它,这种实现方式有无问题? 有 不能无限开进程
    5.改写下列程序,分别别实现下述打印效果
     1 from multiprocessing import Process
     2 import time
     3 import random
     4 
     5 def task(n):
     6     time.sleep(random.randint(1,3))
     7     print('-------->%s' %n)
     8 
     9 if __name__ == '__main__':
    10     p1=Process(target=task,args=(1,))
    11     p2=Process(target=task,args=(2,))
    12     p3=Process(target=task,args=(3,))
    13 
    14     p1.start()
    15     # p1.join()
    16     p2.start()
    17     # p2.join()
    18     p3.start()
    19     # p3.join()
    20 
    21     p1.join()
    22     p2.join()
    23     p3.join()
    24 
    25     print('-------->4')
    26 
    27     # 效果一:保证最先输出 - ------->4  并发
    28     #
    29     # -------->4
    30     # -------->1
    31     # -------->3
    32     # -------->2
    33     # 效果二:保证最后输出 - ------->4 并发
    34     #
    35     # -------->2
    36     # -------->3
    37     # -------->1
    38     # -------->4
    39     # 效果三:保证按顺序输出       串行
    40     #
    41     # -------->1
    42     # -------->2
    43     # -------->3
    44     # -------->4
    
    
  • 相关阅读:
    EonerCMS——做一个仿桌面系统的CMS(五)
    给博客园的忠告——做事态度决定用户忠诚度
    EonerCMS——做一个仿桌面系统的CMS(三)
    EonerCMS——做一个仿桌面系统的CMS(七)
    更改windows服务的配置文件(app.config)必须重启服务才能生效吗?
    jQuery:动态改变html表单的目标页(Target)
    iBatis.Net实现返回DataTable和DataSet对象
    更上层楼:动态安装你的windows服务
    MongoDB简单实践:Only CRUD
    发布一个从webform改进而来的asp.net mvc分页工具类
  • 原文地址:https://www.cnblogs.com/alice-bj/p/8694194.html
Copyright © 2020-2023  润新知