py列表均分,加入多线程

#列表均分问题,考虑到余数不确定,所以不可能全是绝对均分(只有余数为零才是)。余数怎么处理?

#解决思路:将余数均分到开始的部分等量中,形成(n+1)、(n+1)、...(n+1)、n、n、....n形式尽可能的均分。

# -*- coding: UTF-8 -*-

import  time 
import xlrd
import threading

#读电子表格
def rd_xls():
    list1=[]
    try:
        xls=xlrd.open_workbook('C:/Users/Administrator/Desktop/sms/12345.xls')#打开表格
        sheet=xls.sheet_by_index(0)#获取sheet
        if sheet.row_len(2)!=2:
            print(u'读表格错误, 请检查格式。')
            return list1
        for i in range(1,sheet.nrows):
            list1+=sheet.row_values(i)
        print(u'读取表格完毕!')
        return list1
    except:
        print(u'读表格异常错误。')

def backup(list1):#定义线程带参函数
    n=int(len(list1)/2)
    print(u'共有',n,u'条。')
    i=0
    while i<n:
        try:
            print(list1[i*2])#这里输入第一列:ID
            #print(list1[i*2+1])#这里输入第二列:内容
            i+=1
        except:
            print(u'出现问题')


time_s=time.time()#计时开始
#读取表格数据为列表LIST
list1=rd_xls()
n=int(len(list1)/2)#列表为两列数据:ID+内容
if n==0:
  exit(u'退出')
print(u'共有',n,u'条。')

#LIST均分进行多线程处理
thread_n=95##这里设置线程个数,列表均分数
remainder=n%thread_n#余数有几个
step1=n//thread_n+1#先长步,处理完余数
step2=n//thread_n
start2=remainder*step1#第二次循环起点

#以下分两步加入线程列表
thread_list=[]
for i in range(remainder):#先长步,处理完余数
  list1_p=list1[step1*i*2:step1*(i+1)*2]
  t=threading.Thread(target=backup,args=(list1_p,))
  thread_list.append(t)
for i in range(thread_n-remainder):#再短步,处理完剩下的
  list1_p=list1[(start2+step2*i)*2:(start2+step2*(i+1))*2]#要把新起点单独列项,再加
  t=threading.Thread(target=backup,args=(list1_p,))
  thread_list.append(t)

#线程运行
for t in thread_list:
  t.setDaemon(True) # 设置为守护线程,不会因主线程结束而中断
  t.start()
for t in thread_list:
  t.join() # 子线程全部加入,主线程等所有子线程运行完毕

#backup(list1)
seconds=time.time()-time_s
print(u' ---------用时 '+str(int(seconds//60))+u' 分钟 '+str(int(seconds%60))+u' 秒。-------- ')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值