日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Python常見問題

本文介紹使用OSS Python SDK的常見問題及解決方法。

OSS Python SDK分片上傳失敗

解決方法如下:

  • 先確認是直接上傳到OSS,還是通過其他proxy傳輸到OSS(類似CDN)。如果經過CDN再上傳到OSS,需要在OSS中配置跨域的HTTP Header,例如Access-Control-Allow-OriginAccess-Control-Allow-MehtodsAccess-Control-Allow-Headers等,并暴露ETag。更多信息,請參見PutBucketcors

  • 如果是網絡超時導致上傳失敗,建議使用斷點續傳來替代普通上傳。斷點續傳支持并行上傳以及自定義分片大小。如果捕獲到異常,需要詳細查看并分析捕獲到的SDK異常信息。

  • 清理上傳失敗的碎片文件再重新上傳。

如果以上方案仍舊沒有解決您的問題,需要將以下信息提供給阿里云:

  • SDK返回異常中的requestID。

  • 客戶端部署tcpdump,然后重新運行代碼上傳,并保存抓包。

    tcpdump -i <網卡出口名稱> -s0 host <訪問oss的域名> -w faild.pcap

同臺機器使用ossutil上傳下載很快,而使用Python SDK上傳下載很慢

  • 錯誤原因

    ossutil工具基于Go SDK進行開發,并發上傳的性能較好。如果使用Python SDK上傳、下載時性能遠不如ossutil,通常是因為沒有正確安裝crcmod 。

  • 解決方法

    關于安裝crcmod的更多信息,請參見安裝Python SDK

Centos機器上調用SDK中的分片上傳函數正常,但在Ubuntu機器上總是報403錯誤。

客戶端部署tcpdump抓包,然后通過tcp報文排查是否由于Header信息不正確導致計算簽名與服務端不匹配。

POST /ttsservice%2Fpasswd?uploadId=D468E486D1D94D90A1AB8885A4E32AE0 HTTP/1.1
Host: rokid.oss-cn-hangzhou.aliyuncs.com
Accept-Encoding: identity
Accept: text/html
Content-Length: 137
date: Sat, 29 Dec 2018 07:32:34 GMT
authorization: OSS LTAIknFr:r2KPR0y4E0G5tnU/MYdcvXHP****
Content-Type: application/x-www-form-urlencoded
User-Agent: aliyun-sdk-python/2.6.0(Linux/4.4.0-31-generic/x86_64;3.4.3)

<CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>"3195544E19D99658706D5****"</ETag></Part></CompleteMultipartUpload>HTTP/1.1 403 Forbidden

Server: AliyunOSS
Date: Sat, 29 Dec 2018 07:33:43 GMT
Content-Type: application/xml
Content-Length: 1122
Connection: keep-alive
x-oss-request-id: 5C2723573183****
x-oss-server-time: 0

<?xml version="1.0" encoding="UTF-8"?>
<Error>
 <Code>SignatureDoesNotMatch</Code>
 <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
 <RequestId> 5C2723573183A12D </RequestId>
 <HostId>rokid.oss-cn-hangzhou.aliyuncs.com</HostId>
 <OSSAccessKeyId> LTAXXX </OSSAccessKeyId>
 <SignatureProvided>r2KPR0y4E0G5tnU/MYdc****</SignatureProvided>
 <StringToSign>POST
application/x-www-form-urlencoded
Sat, 29 Dec 2018 07:32:34 GMT
/rokid/ttsservice/passwd?uploadId=D468E486D1D94D90A1AB8885A4E3****</StringToSign>
 <StringToSignBytes>50 4F 53 54 0A 0A 61 70 70 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 77 77 2D 66 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 65 64 0A 53 61 74 2C 20 32 39 20 44 65 63 20 32 30 31 38 20 30 37 3A 33 32 3A 33 34 20 47 4D 54 0A 2F 72 6F 6B 69 64 2D 6F 70 73 2D 6D 6F 64 65 6C 2F 74 74 73 73 65 72 76 69 63 65 2F 70 61 73 73 77 64 3F 75 70 6C 6F 61 64 49 64 3D 44 34 36 38 45 34 38 36 44 31 44 39 34 44 39 30 41 31 41 42 38 38 38 35 41 34 45 33 32 41 45 30 </StringToSignBytes>
</Error>

如果服務端收到的簽名(Signature)和客戶端計算的簽名信息不一致,說明請求的內容已被改動,建議使用HTTPS的方式上傳。

以上是客戶端抓取的報文信息。請將獲取的請求頭信息帶入以下腳本,并將計算結果與SDK進行比較。

import base64
import hmac
import sha
mac = hmac.new("<Secretkey>","POST\n\napplication/x-www-form-urlencoded\nSat, 29 Dec 2018 07:32:34 GMT\n/rokid/ttsservice/passwd?uploadId=D468E486D1D94D90A1AB8885A4E3****", sha)
Signature = base64.b64encode(mac.digest())
print(Signature)

如果抓包數據和腳本計算的結果一致,則說明SDK計算正確。如果抓包數據和腳本計算的結果不一致,可能是因為SDKUbuntu平臺編譯的適配問題導致MD5值不一樣。

Mac環境中用Python啟動多線程并在子線程中使用OSS時,import tensorflow會報錯,沒有import tensorflow則不會報錯。如果沒有啟動多線程,使用OSSimport tensorflow不會報錯。

Python多線程運行時,報如下錯誤:

objc[2483]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.
objc[2483]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

解決方法:

添加環境變量OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES,如下圖所示:fig_python_107749_02

更多信息,請參見macOS 10.13系統使用多線程的錯誤說明

如何添加重試策略

Python SDK自身沒有重試機制。在網絡狀況不好的情況下,可能會出現請求失敗的情況。此時,建議您參考如下代碼自行添加重試策略。

def test_get_object():
    MAX_RETRIES = 3
    retry_count = 0
    while True:
        try:
            retry_count += 1
            # yourObjectName表示不包含Bucket名稱在內的OSS文件的完整路徑,例如abc/efg/example.jpg。
            # yourFileName表示下載到本地文件的完整路徑,例如/users/local/example.jpg。
            bucket.get_object_to_file("yourObjectName", "yourFileName")
            break
        except Exception:
            if retry_count >= MAX_RETRIES:
                raise

部分操作系統無法安裝crcmodC擴展模式怎么辦?

對于無法成功安裝crcmodC擴展模式的系統,您可以關閉CRC64校驗。具體步驟,請參見關閉CRC64數據校驗

如何確保生成的簽名URLhttps開頭?

如果您希望生成的簽名URLhttps開頭,您需要在初始化SDK時設置endpointhttps開頭,例如https://oss-cn-hangzhou.aliyuncs.com

在多進程下怎么使用Bucket實例?

您需要在多進程初始化完成后創建Bucket實例。