python套接字多线程文件传输(大文件切割) - 协程async动态添加任务

类似于在像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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值