python38 1.线程一堆队列 2.事件Event 3.协程 4.断点续传
2020-12-02 02:31
标签:名称 global 解决 range 多线程 提高 分布 运算 安全 python38 1.线程一堆队列 2.事件Event 3.协程 4.断点续传 标签:名称 global 解决 range 多线程 提高 分布 运算 安全 原文地址:https://www.cnblogs.com/llx--20190411/p/10986609.html
from threading import Thread
def call_back(res):
print("任务结果拿到了:%s" % res)
print("任务结果拿到了:%s" % res)
# global res
print("run")
time.sleep(1)
# # return 100
res = 100 # 表示任务结果
callback(res) # 执行回调函数 并传入任务结果
t.start()
# t.join()
# print(res)
print("over")
```# 与进程中的Joinablequeue 使用方式一模一样 但是 不具备IPC
# last in first out 后进先出 先进 后出 模拟堆栈 ===========================================================
# LifoQueue
# 除顺序以外别的都一样
# lq = LifoQueue()# 具备优先级的队列
# PriorityQueue ================================================================
# 可以存储一个可以比较大小的对象 比较越小的优先级越高 自定义对象 不能使用比较运算符 所以不能存储
boot_event = Event()
# boot_event.is_set() 返回事件的状态
# boot_event.wait()等待事件发生 ,就是等待事件被设置为True
# boot_event.set() 设置事件为True
def boot_server():
print("正在启动服务器......")
time.sleep(3)
print("服务器启动成功!")
boot_event.set() # 标记事件已经发生了
def connect_server():
boot_event.wait() # 等待事件发生
print("链接服务器成功!")
t1.start()
t2.start()
```
? True: event.clear()
# 使用生成器来实现 单线 并发多个任务
import time
# def func1():
# a = 1
# for i in range(10000000):
# a += 1
# # print("a run")
# yield
#
# def func2():
# res = func1()
# a = 1
# for i in range(10000000):
# a += 1
# # print("b run")
# next(res)
#
# st = time.time()
# func2()
# print(time.time() - st)
a = 1
for i in range(10000000):
a += 1
def func2():
a = 1
for i in range(10000000):
a += 1
st = time.time()
func1()
func2()
print(time.time() - st)
```
import greenlet
def task1():
print("task1 run")
g2.switch()
print("task1 over")
g2.switch()
def task2():
print("task2 run")
g1.switch()
time.sleep(2)
print("task2 over")
g2 = greenlet.greenlet(task2)
# g2.switch()
```断点续传
任务进行过程中,由于某些原因导致任务没有完成
在重新启动程序之后 可以接着上次断掉的位置继续传输
=========== ================ 服务器
=========== 50
================
1.客户端 需下载某个文件
输入一个文件名称
判断该文件是否已经下载
判断文件是否传输完毕
一个任务存在的状态
1.新任务 本地没有
文件不存在 并且任务记录中也不存在
2.任务未完成 本地有 但是不完整
文件已经存在 但是任务记录标记为未完成
3.任务已完成 本地有完整的数据
文件已经存在 任务标记为已完成
4.任务已经完成 但是数据被删除
文件不存在 任务标记为完成
任务记录?
新任务 需要添加到记录中 未完成
下载完成 修改记录为完成
需要哪些数据?
任务名称
文件名称
状态
未完成
已完成
{"name":False}
字典存储任务 需要永久存储
使用方法
将测试文件放在服务器的 serverFiles中
文章标题:python38 1.线程一堆队列 2.事件Event 3.协程 4.断点续传
文章链接:http://soscw.com/essay/23173.html