我能够在Python中获得包含查询的电子邮件列表,但是当我从一个线程中运行代码时,我收到错误:
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER]
这是我如何调用线程:
Thread(target=get_messages_for_label, args=({'recruitment'})).start()
此行发生错误:
response = service.users().labels().list(userId=user_id).execute()
然而,当我在没有线程的情况下运行它(作为一个简单的方法调用),它工作正常。
很难在两者之间共享代码,因为在启动线程和发生错误之间存在相当多的方法调用。
任何帮助将不胜感激。
答案 0 :(得分:1)
我刚发现这篇文章:https://developers.google.com/api-client-library/python/guide/thread_safety。
根据文档,Gmail API是在Httplib2之上构建的,它不是线程安全的。
作为一种解决方法,您可以为每个命令执行方法提供http对象的新实例。
就我而言
std::string str = CW2A(tabCurrentCString, CP_UTF8);
变为:
service.labels().list().execute()
答案 1 :(得分:1)
Google的oauth2client
已弃用。使用新的google-auth库时,您可以按以下方式创建授权的Http实例:
import googleapiclient.discovery
from google.oauth2 import service_account
from googleapiclient import _auth
credentials = service_account.Credentials.from_service_account_info(...)
service = googleapiclient.discovery.build('drive', 'v3', credentials=credentials)
http = _auth.authorized_http(credentials)
service.files().get(...).execute(http=http)