In asynchronous processing, a program does not need to wait for a task to complete before it can begin executing other tasks. To asynchronously process data in Object Storage Service (OSS), you can use the x-oss-async-process parameter. This topic describes how to use OSS SDK for Python V2 in asynchronous processing scenarios, such as document conversion, video transcoding, and video merging.
Usage notes
The sample code in this topic uses the region ID
cn-hangzhoufor the China (Hangzhou) region. By default, a public endpoint is used to access resources in a bucket. If you want to access resources in the bucket from other Alibaba Cloud services in the same region, you can use an internal endpoint. For more information about OSS regions and endpoints, see Regions and endpoints.
Method definition
async_process_object(request: AsyncProcessObjectRequest, **kwargs) → AsyncProcessObjectResultRequest parameters
Parameter | Type | Description |
request | AsyncProcessObjectRequest | The request for the AsyncProcessObject operation. For parameters in the request, see AsyncProcessObjectRequest. |
Response parameters
Type | Description |
AsyncProcessObjectResult | The return value. For more information, see AsyncProcessObjectResult. |
For the complete method definition, see async_process_object.
Sample code
The following sample code converts the format of a document using OSS SDK for Python V2:
import base64
import argparse
import alibabacloud_oss_v2 as oss
# Create a parser for parsing command-line arguments and describe the purpose of the script.
parser = argparse.ArgumentParser(description="async process object sample")
# Specify command-line arguments, including the required region, source bucket name, endpoint, and source object name, destination object name, and destination bucket name.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--key', help='The name of the object.', required=True)
parser.add_argument('--target_key', help='Specify the name of the processed object.', required=True)
parser.add_argument('--target_bucket', help='Specify the name of the bucket used to store processed object.', required=True)
def main():
# Parse command-line arguments.
args = parser.parse_args()
# Obtain access credentials from environment variables for authentication.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Use the default configuration to create a cfg object and specify the credential provider.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Set the region attribute of the cfg object to the region provided in the command line.
cfg.region = args.region
# If a custom endpoint is provided, update the endpoint attribute of the cfg object with the provided endpoint.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Use the preceding settings to initialize the OSSClient instance.
client = oss.Client(cfg)
# Define a style for converting DOCX to PNG.
style = "doc/convert,target_png,source_docx"
# Base64-encode the destination bucket name and object name to make them URL-safe.
target_bucket_base64 = base64.b64encode(args.target_bucket.encode()).decode()
target_key_base64 = base64.b64encode(args.target_key.encode()).decode()
# Create a process instruction that includes the style and destination path.
process = f"{style}|sys/saveas,o_{target_key_base64},b_{target_bucket_base64}"
# Send the request to asynchronously process the object and store the resulting object in the destination bucket.
result = client.async_process_object(oss.AsyncProcessObjectRequest(
bucket=args.bucket, # The source bucket name.
key=args.key, # The source object name.
process=process, # The processing instruction.
))
# Display the status code and other result information to check the request status and result.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' event id: {result.event_id},'
f' task id: {result.task_id},'
f' process request id: {result.process_request_id},'
)
# Call the main function to start the processing logic when the script is directly run.
if __name__ == "__main__":
main() # Specify the entry point of the script. The control flow starts here.Common scenarios
Video transcoding
Video-to-animated-image conversion
Frame capture
Audio transcoding
Blind watermark decoding
References
For more information about asynchronous processing, see Asynchronous processing.
For the complete sample code for asynchronous processing, see async_process_object.py.