Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 程序仅使用multiprocessing.dummy运行_Python_Multiprocessing - Fatal编程技术网

Python 程序仅使用multiprocessing.dummy运行

Python 程序仅使用multiprocessing.dummy运行,python,multiprocessing,Python,Multiprocessing,我正在将一个文件并行上传到一个amazons3bukcet。我的代码完全符合我的需要。出于调试目的,我使用了multiprocessing.dummy导入池中的。现在程序运行了,我去掉了.dummy,只使用了多处理导入池中的。但是,在这一小改动之后,我的文件上载失败(跳到“其他”下的“文件上载已取消”)。我不确定是什么问题。下面发布的是一个代码。我删掉了大部分不相关的部分 def multipart_upload(bucketname, keyname, parallel_processes=5

我正在将一个文件并行上传到一个
amazons3bukcet
。我的代码完全符合我的需要。出于调试目的,我使用了multiprocessing.dummy导入池中的
。现在程序运行了,我去掉了
.dummy
,只使用了多处理导入池中的
。但是,在这一小改动之后,我的文件上载失败(跳到“其他”下的“文件上载已取消”)。我不确定是什么问题。下面发布的是一个代码。我删掉了大部分不相关的部分

def multipart_upload(bucketname, keyname, parallel_processes=5):
    """
    Parallel multipart upload.
    """
    source_size = os.stat(keyname).st_size
    mp = bucket.initiate_multipart_upload( keyname )
    bytes_per_chunk = max(int(math.sqrt(5242880) * math.sqrt(source_size)),
                          5242880)
    chunk_amount = int(math.ceil(source_size / float(bytes_per_chunk)))

    def _upload(keyname, offset, part_num,bytes):
        try:
            print( 'Start uploading part #%d ...' % part_num )
            with FileChunkIO(keyname, 'r', offset=offset,
                             bytes=bytes) as fp:
                mp.upload_part_from_file( fp=fp, part_num=part_num )
        except Exception as e:
            print( 'FAILED uploading part #%d' % part_num )
            raise e
        else:
            print( 'UPLOADED part #%d' % part_num ) 

    if s3_has_uptodate_file(bucketname, keyname):
        print ( 'File already present in bucket. Upload Cancelled')
        mp.cancel_upload()
    else:
        print ( 'File Upload begininning with {0} cores'.format( parallel_processes ) )
        pool = Pool(processes=parallel_processes)
        for i in range( chunk_amount ):
            offset = i * bytes_per_chunk
            remaining_bytes = source_size - offset
            bytes = min( [bytes_per_chunk, remaining_bytes] )
            part_num = i + 1
            start = timer()
            pool.apply_async( _upload, [keyname, offset, part_num, bytes] )
        pool.close()
        pool.join()
        end = timer()

    if len( mp.get_all_parts() ) == chunk_amount:
        mp.complete_upload()
        print ( 'File Upload Complete\nTime taken {0} seconds'.format( end - start ) )
    else:
        print ( 'File Upload Cancelled' )
        mp.cancel_upload()  

multipart_upload(default_bucket, 'mybigfile.txt')

使用
pool.apply
而不是
pool.apply\u async
,则会出现错误。这可能是由于您的模块顶层没有定义上传的
。@dano是的。它给了我一个
cPickle.PicklingError:cannotpickle:attributelookup\uuu内置函数失败
错误。我该如何解决这个问题。你能在模块的顶层定义
\u upload
,而不是在
多部分上传中定义吗?我试试。我把它嵌套在我的
多部分上传中
,因为当我把它放在外部时,我遇到了问题