ssl.SSLError:[SSL:WRONG_VERSION_NUMBER]线程化时的Gmail

时间:2017-10-11 21:38:13

标签: 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()

然而,当我在没有线程的情况下运行它(作为一个简单的方法调用),它工作正常。

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

任何帮助将不胜感激。

2 个答案:

答案 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)