【xlwings1】多线程写入excel数据
#!/ufr/bin/env python
# -*- coding:utf-8 -*- import xlwings as xw import queue
import threading
import time
StopEvent = object()
class TreadPool:
def __init__(self, max_num, max_tast_num = 0):
self.max_num = max_num #最大线程数
if max_tast_num: #根据是否制定最大任务数来指定队列程度
self.q = queue.Queue() #队列不限定长度
else:
self.q = queue.Queue(max_tast_num) #根据用户指定长度创建队列
self.generate_list = [] #记录生成的线程
self.free_list = [] #记录空闲的线程
self.terminal = False
def run(self, target, args, callback=None):
"""运行该函数,调用线程池"""
if len(self.free_list) == 0 and len(self.generate_list) < self.max_num:
#没有空闲线程并且当前创建线程数量小于最大允许线程数量时允许创建线程
self.creat_thread() #调用创建线程函数
tast = (target, args, callback) #将任务打包成为元组放入队列
self.q.put(tast) def creat_thread(self):
"""创建线程,并且运行,这时调用call函数,所有实现均在call函数内"""
thread = threading.Thread(target=self.call)
thread.start()
def call(self):
"""线程调用该函数"""
current_thread = threading.currentThread() #获取执行该函数的当前线程
self.generate_list.append(current_thread) #将线程加入生成的线程列表 tast = self.q.get() #从队列中取出一个任务包 while tast != StopEvent:
target, args, backcall = tast #将元组人物包,赋值给变量
try:
result = target(*args) #执行函数,并将返回值赋值给result
except Exception as e:
result = None if backcall:
try:
backcall(result) #执行回调函数,并将result作为参数传给回调函数
except Exception as e:
pass self.free_list.append(current_thread) #执行完毕,将当前线程对象加入空闲列表
if self.terminal: #是否强制终止
tast = StopEvent
else:
tast = self.q.get() #等待那任务,如果有任务直接循环执行,如果没有则等待,一旦run方法中放入任务则继续执行任务,无需再创建线程
self.free_list.remove(current_thread) #拿到任务后,清除空闲线程
else:
self.generate_list.remove(current_thread)
def close(self):
"""所有线程全部运行完毕后,停止线程
call函数运行完毕后,所有的线程此时都在等待拿任务,此时,只要给队列里面添加StopEvent对象则线程就会结束"""
generate_size = len(self.generate_list)
while generate_size:
self.q.put(StopEvent)
generate_size -= 1
def terminate(self):
"""不等待线程全部运行完毕任务,直接终止"""
self.terminal = True #正在运行的线程运行完毕后会终止
generate_size = len(self.generate_list)
while generate_size: #终止已经在等待的那一部分线程
self.q.put(StopEvent)
generate_size -= 1 def func(li):
for i in range(10000):
li.append([i]) def world():
wb = xw.Book.caller()
li = []
pool = TreadPool(5)
for i in range(5):
pool.run(target=func, args=(li,))
pool.close()
print(li) wb = xw.Book.caller()
wb.sheets[0].range("a1").value = li
多线程写入excel
【xlwings1】多线程写入excel数据的更多相关文章
- 读取、写入excel数据
在实际项目中,不可避免的会操作excel表格.一直以来都是读取excel表格,可今天为了写入excel表格,可是煞费苦心,终于完成,记录下来以便后续使用. 1.读取excel表格的数据 读取excel ...
- 按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格
首先来建立一个新的Excel文档,在桌面上点击右键,选择[新建]-[Excel工作表],命名为[新手学员]. 现在这个新Excel文档是空白的,我们接下来会通过按键精灵的脚本来打开并写入一些数据.打开 ...
- C#中NPOI操作excel之读取和写入excel数据
一.下载引用 下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2 ...
- 使用NPOI写入Excel数据(ASP.NET)
第一次做这个写入数据的功能,研究了下npoi的类 IWorkbook wb = new HSSFWorkbook(); //创建表 ISheet sh = wb.CreateSheet("X ...
- python 写入excel数据而不改变excel原有样式
目标:python写数据到excel,不改变原有样式 解决:在打开excel时,加入该参数formatting_info=True
- c# 读取和写入excel数据
1. 读取 DataTable GetDataFromExcelByConn(bool hasTitle = false){ OpenFileDialog openFile = new Open ...
- matlab写入excel数据
使用xlswrite 可以help xlswrite查看用法 xlswrite(filename,A)xlswrite(filename,A,sheet)xlswrite(filename,A,xlR ...
- Java使用POI读取和写入Excel指南
Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...
- C# 操作Excel基础篇(读取Excel、写入Excel)
注意事项:Excel的数据表中最多只能储存65535行数据,超出后,需要将数据分割开来进行储存.同时对于Excel中的乱码象限,是由于编码的错误方式导致引起的! 一.读取Excel数据表,获得Data ...
随机推荐
- Qt分割线
方法:使用QFrame QFrame * line = new QFrame(); line->setFrameShape(QFrame::HLine); line->setFrameSh ...
- AnsiString, String, char,char
AnsiString 是一个类,String 是一个结构,char* 是一个指针 .String是Pascal的类型原型,因为C++中没有字符串数据类型的,因此使用char*来存储,char*必须是以 ...
- Ubuntu 快速安装配置Odoo 12
Odoo 12预计将于今年10月正式发布,这是一次大版本更新,带来了一些不错的新特性,如 文件管理系统(DMS) 用户表单中新增字段(Internal user, Portal, Public) HR ...
- Zuul微服务网关
Zuul简介: Zuul是Netflix开源的微服务网关,它可以和Eureka.Ribbon.Hystrix等组件配合使用.Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能 ...
- 单独安装Babel或者Less
1.直接安装Babel法: 1)初始化自动创建package.json npm init 2)首先全局安装Babel. npm install -g babel-cli 3)项目安装Babel. np ...
- iPhoneX适配随笔
1.安全区域 2.NavigationBar 和 TabBar的xib示意图 两个View要相同的效果,坐标不同 UIButton *btn = [UIButton buttonWithType:UI ...
- day 39 MySQL之多表查询
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都 ...
- 版本控制git之三-多人协作 变基 推送 拉取 删除远程分支
版本控制git之三-多人协作 wangfeng7399已关注0人评论350人阅读2019-02-20 21:33:08 如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源 ...
- Python学习day36-并发编程(2)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- cdh_hadoop下载地址
http://archive.cloudera.com/cdh5/cdh/5/