【发布时间】:2015-04-23 22:28:15
【问题描述】:
我有一个 CLI 脚本,用于将文件推送到 s3 存储桶中。 对于较大的文件,我将文件分成几部分并上传 在平行下。 (在这里粘贴代码结构。我试图做一个极简的例子,但即使这样也有 60 行)
def _upload_part(argFile, argBucket, max_attempts_limit, **core_chunk):
#bunch of stuff
pool = Pool(processes=parallel_processes)
for i in range( chunk_amount ):
#bunch of stuff
pool.apply_async( _upload_for_multipart, [keyname, offset, mp, part_num, bytes] )
pool.close()
pool.join()
def _upload_for_multipart(keyname, offset, mp, part_num, bytes):
#code to upload each part
#log the status of each part to log files
def _get_logger( pdir, ldir, lname, level, fmt ):
os.makedirs( logs_dir )
logging.basicConfig(
filename=os.path.join(logs_dir, lname),
level=level,
format=fmt
)
return logging.getLogger( lname )
#under main
if __name__ == "__main__":
logneeds = dict( pdir=exec_dir, ldir='logs', lname='s3_cli.log', level='INFO',
fmt='%(asctime)s %(levelname)s: %(message)s' )
logger = _get_logger(**logneeds)
上述代码结构在 OSX 和 Linux 中有效,但在 Windows 中失败。它说
name 'logger' is not defined下_upload_for_multipart函数。全局变量的方式有区别吗
在基于 windows 和 unix 的操作系统中进行解释?
编辑:添加了工作示例here
【问题讨论】:
-
很难调试不存在的代码。
-
@martineau - 我可以在这里发布代码,但我不能让它小于 60 行代码......
-
@martineau - 在 SO AFAIK 上不允许粘贴指向代码的链接并被否决。如果代码太长,人们会要求一个小例子
-
不鼓励但人们还是这样做(粘贴链接)。
标签: python logging multiprocessing