同时对N个文件进行操作--多进程

数据文件很多,可以通过DIE分成多组,其中每组数据文件可以独立完成操作,提效方法:N个进程同时运行
界面:qt designer编写
主程序中设置多进程,其中multiprocessing.freeze_support()可以实现:在程序打包后,运行时只出现一个界面,否则设置几个进程会增加出现几个窗口


import multiprocessing
import test_main

class mywindow(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self):
        super(mywindow, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.mains)

    def mains(self):
    	LotID =test_mian.tomain(filepath, 8) #8为进程个数

if __name__=="__main__":

    app=QtWidgets.QApplication(sys.argv)
    myshow=mywindow()
    multiprocessing.freeze_support()  
    myshow.show()
    sys.exit(app.exec_())

下面是文件test_main.py。中间增加一个转换的函数,因为最终的实现函数有参数>1,搞不懂怎么实现更好,网上搜了一些方法,感觉增加一个函数更方便。。。。(新手勿喷)

from multiprocessing import Pool as ProcessPool

def to_main(filepath):
    #省略获取参数DieID的部分
    BIN_exchange(filepath, DieID)
    
def tomain(filepath, num):
    #省略获得filepath中的需要处理的文件地址,DB_path_list
    with ProcessPool(processes= num) as pool:
        pool.map(to_main, DB_path_list)#这里才真正实现多进程操作,参数1为要实现多进程的函数A,参数2为函数A的形参集
    return WaferID

with ProcessPool(processes= num) as pool: pool.map(to_main, DB_path_list)
pool.map()官方解释:
def map(self, func, iterable, chunksize=None):

  Apply `func` to each element in `iterable`, collecting the results in a list that is returned.

return self._map_async(func, iterable, mapstar, chunksize).get()

操作的文件为csv,需要修改里面部分内容,代码如下:

            fp = open(filepath_DB, 'w', newline='', encoding='utf-8')
            csv_write = csv.writer(fp)
            print(DB_data)
            for j in range(0, len(DB_data)):
                print(DB_data[j])
                csv_write.writerow(DB_data[j])

这样用的一直都没有问题,但是今天运行程序发现8个进程时,第一次的8个文件有一些会被清空,直到将进程数量减少为2才避免了清空。最后检查代码,缺少文件关闭,添加上后,果然该问题没有了,我理解的是,那几个文件不是被清空了,而是仍然在后台未关闭,所以看起来是0kb。修改如下:

            fp = open(filepath_DB, 'w', newline='', encoding='utf-8')
            csv_write = csv.writer(fp)
            print(DB_data)
            for j in range(0, len(DB_data)):
                print(DB_data[j])
                csv_write.writerow(DB_data[j])
            fp.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值