类似于在像QQ一样的文件+聊天服务器中,
既要传输文件,同时要把消息传过去, 而文件太大, 直接阻塞
可以将文件切分为小部分, 协程传递
字节(可以二进制读取文件)切分
def cut(self, byte:bytes, seg=segment) -> list:
return [byte[x:x+seg] for x in range(0, len(byte), seg)]
十分简洁
实现
自定义的是2kb一切分, 改一下segment
即可
0.2秒已更新, 更改 delay
import asyncio
import os
import sys
from threading import Thread
base = 1024
segment = base*2
delay = 0.2
new_file = 0
update_file = 1
request_file = 2
normal_text = 3
loop = asyncio.get_event_loop()
main_thread = Thread(target=loop.run_forever)
def save_bytes(file, byte:bytes):
with open(file, "wb") as f:
f.write(byte)
def get_eval(str, defined=None):
try:
res = eval(str)
if isinstance(res, type(defined)):
return res
raise TypeError
except:
return defined
class SEND():
def __init__(self, index, name, fbytes:bytes, conn:callable, encode='utf8'):
self.segs = self.cut(fbytes)
self.encode = encode
self.total = len(self.segs)
self.index = index
self.conn = conn
self.finish = False
self.name = name
asyncio.run_coroutine_threadsafe(self.update(