python网络编程基础,进程,线程介绍。有代码

网络编程 IP,端口,协议(TCP)

创建进程: import multiprocessing     密集计算用进程
			aa=multiprocessing.Process(target=函数名)  创建进程对象
    			传实参给函数的两种方式,元组,和字典
    		aa=multiprocessing.Process(target=coding,args=('ddddd',))  
    		aa=multiprocessing.Process(target=music_,kwargs={'shijian':5})
            aa.daemon=True 设置守护主进程,必须在start前设置,监听主进程,主进程结束,子进程也立马结束
            aa.terminate() 子进程自己结束自己
            aa.start()  开始运行进程并调用函数
            aa.join()  等待执行,主进程等待aa进程执行完之后,再继续往下执行
            
操作进程: import os
			bb=os.getpid()   获取当前进程id
    		cc=multiprocessing.current_process().pid  获取当前进程id
    		dd=os.getppid()  获取父进程id
            os.kill(pid,9)    杀死当前进程,9是确认杀死
注意点:进程之间的全局变量是不共享的,当创建并运行子进程后,子进程会复制一份主进程的所有代码,那这时在子进程修改全局变量主进程并不会被修改。这时候只是进程之间的全局变量名一样,但操作的不是同一进程里面的全局变量
###### 线程是进程中的任务   进程有id 线程没有id,但是可以返回线程对象
IO密集用线程
创建线程 : import threading
			aa=threading.Thread(target=函数名)  创建线程对象
    		aa.start()      启动线程
         		创建线程并传参给函数,与进程一样 args=元组,kwargs=字典
            print(threading.current_thread())    获取线程对象
            aa.daemon=True    主线程守护,主线程结束,子线程也结束
            aa.join()         主线程等待当前线程执行完成
注意点:执行时无序的,线程之间共享全局变量,但有可能会有错误。
			aa=threading.Lock()  创建互斥锁,能解决线程全局变量共享出错的问题
            aa.acquire()  		上锁
       		aa.release()        解锁
    		

互斥锁把全局变量放在锁之间,没解锁,就是死锁,代码会卡死
在这里插入图片描述
​ 只要是网络程序都会用到socket来完成,所有网络通讯
在这里插入图片描述
TCP在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ww=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 创建socket连接对象

在这里插入图片描述

可执行多任务服务器代码

import socket
import threading

def chuli(newser_socket,ipadd):
    while True:
        straa = newser_socket.recv(1024)
        if len(straa) == 0:
            print('客户端下线了',ipadd)
            break
        print(straa.decode('utf-8'))
        newser_socket.send('服务端收到信息,谢谢'.encode('utf-8'))
    newser_socket.close()

if __name__=='__main__':
    ser_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	ser_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)   #复用服务端
    ser_socket.bind(('',8080))
    ser_socket.listen(128)
    while True:
        new_sco1,ipadd=ser_socket.accept()
        print('来自客户端连接:',ipadd)
        xiancheng1=threading.Thread(target=chuli,args=(new_sco1,ipadd))
        xiancheng1.daemon = True
        xiancheng1.start()
    # ser_socket.close()

客户端代码

import socket
import time


client_sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1',8080))
for i in range(10):
    client_sock.send('00000000000'.encode('utf-8'))
    fanhui=client_sock.recv(1024)
    print(fanhui.decode('utf-8'))
    time.sleep(1)
client_sock.close()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值