摘要: 1、项目功能 【客户端】 客户端有简单的页面命令提示 ,功能包含 【1】查看服务器文件库中的文件列表(普通文件) 【2】可以下载其中的某个文件到本地 【3】可以上传客户端文件到服务器文件库 【服务端】 服务器需求 【1】允许多个客户端同时操作 【2】每个客户端可能回连续发送命令 2、技术分析 【1】 阅读全文
posted @ 2021-01-11 18:59 昱成 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 使用fork完成并发 【1】 创建套接字,绑定,监听 【2】 等待接受客户端连接请求 【3】创建新的进程处理客户端请求,父进程继续等待连接其他客户端 【4】 客户端退出对应子进程结束 【osfork-server.py】from socket import * import os,sys impor 阅读全文
posted @ 2021-01-11 16:14 昱成 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 1、进程和线程的区别和联系 【1】两者都是多任务编程的方式,都能够使用计算机的多核 【2】进程的创建删除要比线程消耗更多的计算机资源 【3】进程空间独立,数据安全性好,有专门的进程间通信方法 【4】线程使用全局变量通信,更加简单,但是需要同步互斥操作 【5】一个进程可以包含多个线程,线程共享进程的空 阅读全文
posted @ 2021-01-11 13:49 昱成 阅读(611) 评论(0) 推荐(0) 编辑
摘要: 线程锁 1、创建线程对象 lock = threading.Lock() 2、上锁 lock.acquire() 3、解锁 lock.release() with lock 上锁 import threading a = b = 0 lock = threading.Lock() def value 阅读全文
posted @ 2021-01-11 13:42 昱成 阅读(70) 评论(0) 推荐(0) 编辑
摘要: from threading import Thread from time import sleep a = 1 def foo(): global a a = 1000 def bar(): sleep(1) print("a = ",a) t1 = Thread(target = foo) t 阅读全文
posted @ 2021-01-11 13:39 昱成 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 事件Event 1、创建线程对象 e = threading.Event() 2、事件阻塞函数 e.wait([timeout]) 3、设置事件 e.set() 4、清除事件 e.clear() import threading from time import sleep #共享资源 s = No 阅读全文
posted @ 2021-01-11 13:33 昱成 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 【1】创建父子进程分别表示司机和售票员 【2】当售票员捕捉到SIGINT信号时,给司机发送SIGUSER1信号 此时司机打印 "老司机开车了" 【3】当售票员捕捉到SIGQUIT信号时,给司机发送SIGUSER2信号。 此时司机打印 "车速有点快,系好安全带" 【4】当司机捕捉到SIGTSTP信号时 阅读全文
posted @ 2021-01-11 12:17 昱成 阅读(217) 评论(0) 推荐(0) 编辑