一、Socket简介
socket通常也称作\"套接字\",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过\"套接字\"向网络发出请求或者应答网络请求。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
socket和file的区别:
file模块是针对某个指定文件进行【打开】【读写】【关闭】
socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
socket server
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
ip_port = (\'127.0.0.1\',9999)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(5)
while True:
print \'server waiting...\'
conn,addr = sk.accept()
client_data = conn.recv(1024)
print client_data
conn.sendall(\'不要回答,不要回答,不要回答\')
conn.close()
socket client
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
ip_port = (\'127.0.0.1\',9999)
sk = socket.socket()
sk.connect(ip_port)
sk.sendall(\'请求占领地球\')
server_reply = sk.recv(1024)
print server_reply
sk.close()
web服务器应用
#!/usr/bin/env python
#coding:utf-8
import socket
def handle_request(client):
buf = client.recv(1024)
client.send(\"HTTP/1.1 200 OK\\r\\n\\r\\n\")
client.send(\"Hello, World\")
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((\'localhost\',8080))
sock.listen(5)
while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()
if __name__ == \'__main__\':
main()
二、多进程
1、Pool使用简介
有些情况下,所要完成的工作可以分解并独立地分布到多个工作进程,对于这种简单的情况,可以用Pool类来管理固定数目的工作进程。
示例一:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
from multiprocessing import Pool
def run(fn):
time.sleep(1)
print(fn*fn)
if __name__ == \'__main__\':
testFL = [1,2,3,4,5,6]
print(\'顺序执行或者叫做串行执行,也叫单进程\')
s = time.time()
for i in testFL:
run(i)
t1 = time.time()
print(\'顺序执行时间:\',int(t1-s))
#===============
print(\'创建多个进程,并行执行\')
pool = Pool(6) #创建拥有6个进程数量的进程池
pool.map(run,testFL) #testFL:要处理的数据列表,run:处理testFL列表中的数据函数
pool.close() #关闭进程池,不再接受新的进程
pool.join() #主进程阻塞等待子进程的退出
t2 = time.time()
print(\'并行执行时间:\',int(t2-t1))
示例二:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool
def add(x, y):
print(datetime.now(), \"enter add func...\")
time.sleep(2)
print(datetime.now(), \"leave add func...\")
return x+y
def add_wrap(args):
return add(*args)
if __name__ == \"__main__\":
pool = ThreadPool(4) # 池的大小为4
print(pool.map(add_wrap, [(1,2),(3,4),(5,6)]))
#close the pool and wait for the worker to exit
pool.close()
pool.join()
备注:池完成其所分配的任务时,即使没有更多的工作要做,也会重新启动工作进程。
2、进程执行结果
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from multiprocessing import Pool
import time
def func(msg):
for i in range(3):
print(msg)
time.sleep(1)
return \"done \" + msg
if __name__ == \"__main__\":
pool = Pool(processes=4)
result = []
for i in range(10):
msg = \"hello %d\" %(i)
result.append(pool.apply_async(func, (msg,)))
pool.close()
pool.join()
for res in result:
print(res.get())
print(\"Sub-process(es) done.\")
继续阅读与本文标签相同的文章
-
花旗投资现金流量预测公司Cashforce,拟新添增值服务
2026-05-18栏目: 教程
-
开发者必读 · 周报 | 003期
2026-05-18栏目: 教程
-
科技巨头正在合作解决自动驾驶标准!
2026-05-18栏目: 教程
-
人工智能帮助设计自行车并打破竞速纪录
2026-05-18栏目: 教程
-
分层存储超详细解读,为什么大数据时代它已不可或缺
2026-05-18栏目: 教程
