java多进程端口复用_socket IO多路复用 多线程 多进程

小知识点

python中无块级作用域,是以函数为作用域

#python中无块级作用域

if 1==1:

name = 'alex'

print(name)

for i in range(10):

name =i

print(name)

#python 中以函数为作用域

def func():

name = 'alex'

func()

print(name)

python的作用域在执行之前已经确定。

#python的作用域在执行之前已经确定

name = 'alex'

def f1():

print(name)

def f2():

name = 'eric'

f1()

f2()

作用链

li = [lambda :x for x in range(10)]

r = li [0]()

print(r)

li为列表

li列表中的元素:【函数,函数,函数 ...】

函数在没有执行前 ,内部代码不执行.

socket

IO多路复用

概述

select , poll , epoll

监听 socket 对象内部是否变化了?链接或者收发消息会发生变化

socket实现伪并发

socket服务器端

import socket

import select

sk = socket.socket()

sk.bind(('127.0.0.1',999,))

sk.listen(5)

inputs = [sk,]

while True:

rlist,w,e = select.select([sk,],[],[],1)

#print(rlist)

print(len(inputs),len(rlist))

#监听sk(服务器端)对象,如果sk对象发生变化,表示 有客户端来连接了,此时rlist值为 【sk】

# 监听conn对象,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的之为 【客户端】

for r in rlist:

if r == sk:

#新客户来连接

conn,address = r.accept()

#conn是什么?其实socket对象

inputs.append(conn)

conn.sendall(bytes('hello',encoding='utf-8'))

else:

print('======>')

try:

ret = r.recv(1024)

if not ret:

raise Exception('断开连接')

except Exception as e:

inputs.remove(r)

socket读写分离

服务器端

import socket

import select

sk = socket.socket()

sk.bind(('127.0.0.1',999,))

sk.listen(5)

inputs = [sk,]

outputs = []

while True:

rlist,wlist,e = select.select(inputs,outputs,[],1)

#print(rlist)

print(len(inputs),len(rlist),len(wlist),len(outputs))

#监听sk(服务器端)对象,如果sk对象发生变化,表示 有客户端来连接了,此时rlist值为 【sk】

# 监听conn对象,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的之为 【客户端】

for r in rlist:

if r == sk:

#新客户来连接

conn,address = r.accept()

#conn是什么?其实socket对象

inputs.append(conn)

conn.sendall(bytes('hello',encoding='utf-8'))

else:

#r.recv(1024)

print('======>')

try:

ret = r.recv(1024)

if not ret:

raise Exception('断开连接')

else:

outputs.append(r)

except Exception as e:

inputs.remove(r)

for w in wlist:

w.sendall(bytes('response',encoding='utf-8'))

outputs.remove(w)

socket客户端

import socket

sk = socket.socket()

sk.connect(("127.0.0.1",999,))

data = sk.recv(1024)

print(data)

while True:

inp = input('>>>>')

sk.sendall(bytes(inp,encoding='utf-8'))

sk.close()

多线程 多进程

概述:

def f1(arg):

print(arg)

import threading

t = threading.Thread(target =f1,args=(123,))

t.setDaemon(True)#true,表示主线程不等子线程

t.start() #不代表当前线程会被立即执行

t.join(2) # 表示主线程到此,等待..直到子线程执行完毕

#参数,表示主线程在此最多等待n秒

f1(1111)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值