python删除脚本中代码_在python中删除具有多处理功能的文件

问题是,您正在函数内部创建一个函数。

功能

Fn_deleteFiles(inp)

,在的内部定义

deleteFiles(loc)

.

这意味着

删除文件(inp)

只有在

删除文件(loc)

正在运行。

问题是,在内部,

multiprocessing.pool.Pool()

调用

pickle

库将函数对象从这个python进程传输到正在生成的一个新的python函数。

然而,

泡菜

将无法

架线

一个函数,如果它不能定位函数的原点。

下面是演示类似错误的演示。

import pickle

def foo():

def bar():

return "Hello"

return bar

bar = foo()

if __name__ == '__main__':

s = pickle.dumps(bar)

将导致相同的错误:

Traceback (most recent call last):

File ".../stacktest.py", line 10, in

s = pickle.dumps(bar)

AttributeError: Can't pickle local object 'foo..bar'

因此要修复此错误,您可以使用

multiprocessing.pool.ThreadPool

相反,因为它不会泡菜。

import os

from multiprocessing.pool import ThreadPool as Pool

def deleteFiles(loc):

def Fn_deleteFiles(inp):

[fn, loc] = [inp['fn'], inp['loc']]

os.remove(os.path.join(loc, fn))

p = Pool(5)

for path, subdirs, files in os.walk(loc):

if len(files) > 0:

inpData = [{'fn':x, 'loc':loc} for x in files]

p.map(Fn_deleteFiles, inpData)

p.close()

if __name__ == '__main__':

loc = 'DriveWithFilesToDelete'

deleteFiles(loc)

或者,您可以定义

删除文件(inp)

外部

删除文件(loc)

解决这个问题。

警告

由于我不理解的原因,这个答案将挂在空闲的解释器内部。

import os

from multiprocessing import Pool

def Fn_deleteFiles(inp):

print("Delete", inp)

[fn, loc] = [inp['fn'], inp['loc']]

os.remove(os.path.join(loc, fn))

def deleteFiles(loc):

p = Pool(5)

for path, subdirs, files in os.walk(loc):

if len(files) > 0:

inpData = [{'fn':x, 'loc':loc} for x in files]

p.map(Fn_deleteFiles, inpData)

p.close()

if __name__ == '__main__':

loc = 'DriveWithFilesToDelete'

deleteFiles(loc)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值