python 创建:udp tcp服务器 线程 进程 进程池 互斥锁 协程
来源:互联网 发布:a星寻路算法c语言 编辑:程序博客网 时间:2024/06/05 02:44
UDP User Datagram Protocol
TCP Transmission Control Protocol
udp
import socket# 创建udp套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定端口号udp_socket.bind("", 端口号)# 发送消息udp_socket.sendto("发送消息内容", (目的地址,以元祖方式))# 接收消息udp_socket.recvfrom(1024) # 1024代表一次接收数据大小# 关闭套接字udp_socket.close()
tcp客户端
import socket# 创建tcp套接字tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口号tcp_client_socket.bind("", 端口号)# 链接服务器tcp_client_socket.connect((目的地址,以元祖方式))# 接收消息tcp_client_socket.recv(1024)# 发送消息tcp_client_socket.send("消息内容")# 关闭套接字tcp_client_socket.close()
tcp服务器
import socket# 创建tcp套接字tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口号tcp_server_socket.bind("", 端口号)# 响铃tcp_server_socket.listen(128) # 表示最多可以接受128个客户端的链接# 接受客户端链接,返回链接专用套接字和客户端地址client_socket, dest_addr = tcp_server_socket.accept()# 发送消息client_socket.send()# 接收消息client_socket.recv(1024)# 关闭套接字client_socket.close()tcp_server_socket.close()
创建线程
import threadingthread = threading.Thread(target=函数, args=(以元祖方式向函数中传入参数,))thread.start() # 调用子线程
创建进程
import multiprocessingprocess = multiprocessing.Process(target==函数, args=(以元祖方式向函数中传入参数,))process.start() # 调用子进程
进程间通信,队列queue,先进先出
import multiprocessingqueue = multiprocessing.Queue()queue.put(传入数据)queue.get() # 依次取出数据
进程池
import multiprocessingpo = multiprocessing.Pool(3) # 代表进程池中最多有三个进程po.apply_async(函数, (以元祖方式向函数中传入参数,))po.close() # 关闭进程池,不再接受新任务po.join() # 主进程解阻塞
进程池之间的通信
from multiprocessing import manager,poolqueue = Manager().Queue() # 必须使用multiprocess中的Manager中的Queue创建队列po = Pool(3)
互斥锁
import threading# 创建锁mutex = threading.Lock()# 锁定mutex.acquire()# 释放mutex.release()
协程
# 实现方法一:# 例如:两个函数中有yield,在程序中while写入next(),交替切换生成器;属于手动切换# 实现方法二:# 例如:在两个函数while True中分别调用对方的g.switch(),# 这样程序只要执行一个g.switch(),greenlet会自动切换from greenlet import greenletg1 = greenlet(函数名, 传入函数中的参数)g2 = greenlet(函数名, 传入函数中的参数)g1.switch()# 实现方法三:import geventg1 = gevent(函数名, 传入函数中的参数)g2 = gevent(函数名, 传入函数中的参数)g1.join()g2.join()# 还可以写成gevent.joinall([g1, g2]) # [以列表的形式写入gevent(函数名, 参数)]# 只要有延时操作,gevent才会自动切换# gevent 中的延时操作必须用自己的,比如 gevent.sleep(1)# 若是升级代码,代码中已有time模块,更改会很麻烦,这时就需要打补丁form gevent import monkeymonkey.patch_all() # 程序执行到这句话,会分析下面所有代码,把time换成gevent执行 # 看到的是time.sleep(1),实际上执行的是gevent.sleep(1)
迭代器Iterator
可迭代对象:有__iter__方法,且返回一个迭代器对象判断一个对象是否可迭代:from collections import Iterableisinstance(判断对象, Iterable)返回True 则是 False 不是迭代器:有__iter__方法和__next__方法:判断一个对象是否是迭代器:from collections import Iteratorisinstance(判断对象, Iterator)返回True 则是 False 不是迭代器I调用方法:for i in Inext(I)
创建一个迭代器
class Iterator(object): def __init__(self): xxx def __iter__(self): return self def __next__(self): if xxx: xxx else: raise StopIteration # 超过列表范围,要抛出异常
生成器 generator
调用生成器G的方式:
# list(可迭代对象)list(i for i in range(10))list(range(10))for i in G next(G) # 另外一种调用生成器的方式 # G.send(None) # 如果需要往函数中传入参数,则写,不需要传参,写None生成器创建方法(一):将列表推到式的[]改为() G = (i for i in range(10))生成器创建方法(二):函数中的return换成yield,如果生成器也有return,可以通过try,抛出异常的方式获取return的内容:例题:生成器打印列表:def generator(num) i = 0 while i < num: i += 1 yield i-1 # 相当于return # a yield b 可以通过send(a)传入参数,a 和 b 完全没有关系,执行顺序:先b后a return None
调用生成器
G = generator(100)while True: try: num = G.send(None) # 如果没有参数传入,要写send(None) # 还可以用next(G)调用生成器,取出数据 print(num) except StopIteration as ret: # 或者用except Exception as ret print(ret.value) # ret.value原因 ret返回的是一个对象,调用value方法返回None break
阅读全文
0 0
- python 创建:udp tcp服务器 线程 进程 进程池 互斥锁 协程
- TCP->多进程服务器->多进程服务器->线程池
- 多线程、多进程TCP服务器、进程池和线程池
- Python线程、进程、进程池、协程
- python的udp服务器多进程编程
- Python 线程、进程、协程
- Python进程、线程、协程
- python进程、线程、协程
- 进程与线程,TCP与UDP,虚函数面试题
- 进程实现tcp服务器
- 【网络】实现简单的TCP、UDP服务器、TCP多进程/多线程服务器
- 白话Python 进程,线程,协程
- 白话Python 进程,线程,协程
- Python的进程、线程、协程
- Python之进程、线程、协程
- iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP
- iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP
- iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP
- Ngx中的红黑树描述
- ssh--struts.xml
- Eclipse快捷键大全
- HDOJ1096
- 文件读写通用工具类
- python 创建:udp tcp服务器 线程 进程 进程池 互斥锁 协程
- Java-toString方法
- CVPR2017行为识别中的关键帧检测网络AdaScan
- java对zip格式的文件压缩解压工具类
- 一个新人刚知道的小技巧
- C语言之strspn函数
- HDOJ2001
- 【P1514】引水入城
- 使用foreach的条件