Multithreading ssl.SSLError:[ssl:错误的版本号]Gmail线程化时

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()

我能够获得包含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()
然而,当我在没有线程的情况下运行它(作为一个简单的方法调用)时,它工作得很好

在这两者之间很难共享代码,因为在线程启动和错误发生之间有相当多的方法调用


任何帮助都将不胜感激

我刚找到这篇文章:

根据文档,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)

您正在调用的
获取凭据()
对象是什么?