码迷,mamicode.com
首页 > 其他好文 > 详细

5.1.6 练习题

时间:2018-06-16 14:24:53      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:list   closed   lap   练习题   art   mil   hide   rom   style   

1.  进程之间内存空间是隔离还是共享的?

请看代码的输出结果:

技术分享图片
from multiprocessing import Process

n=100 #在windows系统中应该把全局变量定义在if __name__ == ‘__main__‘之上就可以了

def work():
    global n
    n=0
    print(子进程内: ,n)


if __name__ == __main__:
    p=Process(target=work)
    p.start()
    p.join()
    print(主进程内: ,n)
View Code

输出结果:

技术分享图片
子进程内:  0
主进程内:  100
View Code

结论:进程之间的内存空间是隔离的。子进程创建时,拷贝走了主进程的内存数据,存放在自己独立的内存空间上,不会影响主进程的内存数据。

 

2. 基于多进程实现并发的套接字通信

服务器端:

技术分享图片
import socket

from multiprocessing import Process


def community(conn):
    while True:
        try:
            data = conn.recv(1024)
            if not data:
                continue
            conn.send(data.upper())
        except ConnectionResetError:
            break

    conn.close()


def fun_server(IP, PORT):
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind((IP, PORT))
    server.listen(5)

    while True:
        conn, client_addr = server.accept()
        p = Process(target=community, args=(conn,))   # 为每一个连接都开一个子进程,然后继续监听新连接。弊端:并发多的程序,连接数据限制。
        p.start()

    server.close()


if __name__ == __main__:
    fun_server(127.0.0.1, 8080)
View Code

客户端:

技术分享图片
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(client)
client.connect((127.0.0.1, 8080))
print(client)
while True:
    data = input(>>).strip()
    if not data:
        continue

    client.send(data.encode(utf8))

    data = client.recv(1024).decode(utf8)
    print(data)


conn.close()
View Code

 

3. join的应用

有以下代码,分别控制输出:

from multiprocessing import Process
import time
import random

def task(n):
    time.sleep(random.randint(1,3))
    print(-------->%s %n)

if __name__ == __main__:
    p1=Process(target=task,args=(1,))
    p2=Process(target=task,args=(2,))
    p3=Process(target=task,args=(3,))

    p1.start()
    p2.start()
    p3.start()
    
    print(-------->4)

3.1  最先输出-------->4

     原代码就好,无需改动。子进程有睡,不管怎么样都会先输出4.

3.2. 最后输出-------->4

     修改:

     p1.start()

     p2.start()

   p3.start()

   p1.join()

  p2.join()

  p3.join()

3.3 按顺序输出 

   -------->1

   -------->2

   -------->3

   -------->4

修改:

     p1.start()

      p1.join()

     p2.start()

    p2.join()

     p3.start()

    p3.join()

 

 

5.1.6 练习题

标签:list   closed   lap   练习题   art   mil   hide   rom   style   

原文地址:https://www.cnblogs.com/beallaliu/p/9190372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!