Multithreading ssl.SSLError:[ssl:错误的版本号]Gmail线程化时
我能够获得包含Python查询的电子邮件列表,但是当我从线程中运行代码时,我会得到错误:Multithreading ssl.SSLError:[ssl:错误的版本号]Gmail线程化时,multithreading,python-3.x,ssl,gmail-api,Multithreading,Python 3.x,Ssl,Gmail Api,我能够获得包含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()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER]
下面是我如何调用线程的:
Thread(target=get_messages_for_label, args=({'recruitment'})).start()
错误发生在这一行:
response = service.users().labels().list(userId=user_id).execute()
然而,当我在没有线程的情况下运行它(作为一个简单的方法调用)时,它工作得很好
在这两者之间很难共享代码,因为在线程启动和错误发生之间有相当多的方法调用
任何帮助都将不胜感激 我刚找到这篇文章: 根据文档,Gmail API构建在Httplib2之上,Httplib2不是线程安全的 作为一种解决方法,您可以为每个命令执行方法提供http对象的新实例 就我而言
service.labels().list().execute()
变成:
service.users().labels().list(userId=user_id)\
.execute(http=self.__get_credentials().authorize(httplib2.Http()))
谷歌的
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)
您正在调用的
获取凭据()
对象是什么?