最近学的有点迷糊,想总结下,理一理...有不妥之处谢谢指正!
SocketServer:
class Myhandler(SocketServer.BaseRequesthandler):
def handle(self):
pass
s = SocketServer.threadingTCPServer((ip,port),Myhandler)
s.server_forever()socketserver 类调用次序:
1、执行 TCPServer.init 方法,创建服务端Socket对象并绑定 IP 和 端口
2、执行 BaseServer.init方法,将自定义的继承自SocketServer.BaseRequestHandler的类MyHandler赋值给self.RequestHandlerClass
3、执行 BaseServer.server_forever方法,While循环一直监听是否有客户端请求到达当客户端
有连接到达服务器时执行
ThreadingMixIn.process_request 方法,创建一个 “线程”
用来处理请求执行 ThreadingMixIn.process_request_thread 方法执行 BaseServer.finish_request方法,执行self.RequestHandlerClass() 即:执行自定义MyRequestHandler的构造方法(自动调用基类BaseRequestHandler的构造方法,在该构造方法中又会调用 MyRequestHandler的handle方法)
线程:threading
一个应用至少有一个进程,一个进程至少有一个线程,线程是最小执行单元
class Mythreader(threading.Thread):
def run(self):
pass
def fun(args):
pass
t1 = Mythreader(target=fun,args=(args),name="str")
t1.start()················································
def fun(args):
pass
t2 = threading.Thread(target=fun,args=(args))
t2.start()线程安全与锁
threading.lock()
threading.rlock()
锁的操作:acquire()获取,release()释放,rlock()支持连续锁,lock不支持
高级锁threading.condition()
eve = threading.event()
eve.wait() 堵塞线程,直到eve内部标识位被设为True或超时
eve.set() 将标识位设为True
eve.clear() 标识位设为False
进程:multiprocessing
multiprocessing 常用的有Process,pool,subprocess
Process
def fun(args):
pass
p = multiprocessing.Process(target=fun,args=(args,))
p.start()
p.join()pool
def fun(args):
pass
p = multiprocessing.pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None)
p.apply_async(target=fun,args=(args))
p.lose()
processes表示工作进程的个数,默认为None,表示worker进程数为cpu_count()
initializer表示工作进程start时调用的初始化函数,initargs表示initializer函数的参数,如果initializer不为None,在每个工作进程start之前会调用
initializer(*initargs)maxtaskperchild表示每个工作进程在退出/被其他新的进程替代前,需要完成的工作任务数,默认为None,表示工作进程存活时间与pool相同,即不会自动退出/被替换.subprocess
用于子进程运行第三方程序,subprocess,psutil 模块都可以。
如果需要实现调用外部程序的功能,python的psutil模块是更好的选择,它不仅支持subprocess提供的功能,而且还能对当前主机或者启动的外部程序进行监控,比如获取网络、cpu、内存等信息使用情况,在做一些自动化运维工作时支持的更加全面。(引用)
subprocess.call('command','args')
subprocess.popen()详细请看(引用)
https://www.cnblogs.com/zhoug2020/p/5079407.html