Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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 GAE GCS write是否具有与NDB函数类似的异步版本_Python_Google App Engine_Asynchronous_Google Cloud Storage - Fatal编程技术网

Python GAE GCS write是否具有与NDB函数类似的异步版本

Python GAE GCS write是否具有与NDB函数类似的异步版本,python,google-app-engine,asynchronous,google-cloud-storage,Python,Google App Engine,Asynchronous,Google Cloud Storage,是否有像NDB函数一样的异步版本(例如,put\u async) 我发现(从appstats)由于我在代码中按顺序上传多个文件,这会耗费很多时间(所有文件都是按顺序上传的)。我试图减少这一时间,因为有六个文件,这是~7秒,我希望有更多的文件 我已将以下代码片段放入for循环中,该循环迭代用户在网页上选择的所有文件: gcs_file = gcs.open (filename, 'w', content_type = 'image/jpeg') gcs_file.write (photo) g

是否有像NDB函数一样的异步版本(例如,put\u async)

我发现(从appstats)由于我在代码中按顺序上传多个文件,这会耗费很多时间(所有文件都是按顺序上传的)。我试图减少这一时间,因为有六个文件,这是~7秒,我希望有更多的文件

我已将以下代码片段放入for循环中,该循环迭代用户在网页上选择的所有文件:

gcs_file = gcs.open (filename, 'w', content_type = 'image/jpeg') 
gcs_file.write (photo) 
gcs_file.close () 
如果您需要更多数据,请告诉我

更新
原始代码:

photo_blobkey_list = []             
video_blobkey_list = [] 

i = 0 
for photo in photo_list: 
    filename = bucket + "/user_pic_"+str (user_index) + "_" + str (i) 
    # Store the file in GCS 
    gcs_file = gcs.open (filename, 'w', content_type = 'image/jpeg') 
    gcs_file.write (photo) 
    gcs_file.close () 
    # Store the GCS filename in Blobstore 
    blobstore_filename = '/gs' + filename 
    photo_blobkey = blobstore.create_gs_key (blobstore_filename) 
    photo_blobkey_list.append (photo_blobkey) 
    i = i + 1 

i = 0 
for video in video_list: 
    filename = bucket + "/user_video_"+str (user_index) + "_" + str (i) 
    filename = filename.replace (" ", "_") 
    # Store the file in GCS 
    gcs_file = gcs.open (filename, 'w', content_type = 'video/avi') 
    gcs_file.write (video) 
    gcs_file.close () 
    # Store the GCS filename in Blobstore 
    blobstore_filename = '/gs' + filename 
    video_blobkey = blobstore.create_gs_key (blobstore_filename) 
    video_blobkey_list.append (video_blobkey) 
    i = i + 1 
:: 
user_record.put () 
我的怀疑:
基于这些建议,我计划将GCS编写部分放在一个tasklet子例程中,该子例程以文件名和照片/视频作为参数。如何在这里使用“yield”以使上述代码尽可能并行运行(所有照片和视频写入操作)?根据,我需要提供所有要产生的参数,以便使tasklet并行运行。但是,在我的例子中,上传的照片和视频的数量是可变的

相关文本:

如果这是两个独立的收益率报表,它们将在 系列但是产生一组微线程是一种并行的结果: 微线程可以并行运行,产量等待所有微线程的运行 完成并返回结果


有异步版本的


您可以使用它使用云存储或API将异步直接写入云存储。

您可以在任务中执行写入操作

我想您会发现,您可以将其封装在Tasklet中,并获得异步行为。可以作为一个简单的tasklet(因为gcs会在引擎盖下使用urlfetch),也可以使用@ndb.synctasklet。请阅读ndb异步文档的后续部分(它对非ndb异步api有使用)@TimHoffman感谢您的回复。我会尝试使用tasklet和updateyou@TimHoffman我用更多的数据更新了我的问题。按照你和marcadian的建议,我计划使用微线程。我在我的岗位上对如何实施它有一些基本的疑问。请帮助澄清将gcs调用放置在
@ndb.tasklet
中是一个坏主意,因为死锁(很难在
dev_appserver.py
上重现)。我们需要一种方法,通过RPC生成所有地面军事系统呼叫:3@gsinha你是从前端上传的吗?谢谢你的回复。您的解决方案看起来不错,但因为我已经以上面所示的方式使用了gcs库,所以我的第一选择是使用它(而不是迁移到JSON或XML格式)。如果我没有找到一个很好的解决方案,我会选择你的解决方案说明-如果你这样做的话,你将被收取所有的出站转帐费用(而不是使用GCS库,这将是免费的)。@JeffTratner否wont@StuartLangley这就是谷歌支持上周告诉我的;如果不是这样的话,那就太好了。@JeffTratner是谁支持你的?谢谢你的回答。我会尝试更新我的帖子,记住任务有100k的负载限制(对于push taskqueue),如果您的对象大于这个限制。您可以将对象放在数据存储中,并将密钥传递给任务。我已经用更多数据更新了我的问题。正如您和Tim Hoffman所建议的,我计划使用微线程。我在我的岗位上对如何实施它有一些基本的疑问。请帮助澄清