gpt4 book ai didi

python - 与Celery一起分发时,Youtube API OAuth的对象失去身份验证

转载 作者:行者123 更新时间:2023-12-03 06:23:32 25 4
gpt4 key购买 nike

我正在将 celery 与YouTube API配合使用以进行异步调用。我创建了一个类,其中包含YouTube服务的authorized http connection (see: "complete example")。我将该类的实例传递给我的所有celery任务,但是当我调用API时,响应为403,最终我需要为每个任务重新进行身份验证。当我没有 celery 同步运行时,就没有问题。

显然,http对象已被篡改。这可能是泡菜问题(我目前用于序列化的问题),还是 celery 问题?

谢谢!

编辑(有关更多信息):

任务:

@current_app.task(name='test.test_connection')
def testConnection(apiObj):
http = apiObj.http
print http
print http.connections
print http.other_connections

调度员:
def test():
import httplib2
o = ApiObj() #this connects to youtube and authorizes the http object
h = o.http
h.other_connections = {'test':httplib2.HTTPSConnectionWithTimeout('localhost',80,timeout=120)}
print h
print h.connections
print h.other_connections
tasks.testConection.s(o).delay()

在我的自定义api类中,我有一个Http对象(来自httplib2)。从任务发布者中,我在http对象中打印连接,然后将该对象传递给celery任务,在此尝试再次打印它们。

调度员的结果:
<httplib2.Http object at 0x293e6d0>
{'https:www.googleapis.com': <httplib2.HTTPSConnectionWithTimeout instance at 0x2a12b90>, 'https:accounts.google.com': <httplib2.HTTPSConnectionWithTimeout instance at 0x2a0be60>}
{'test': <httplib2.HTTPSConnectionWithTimeout instance at 0x29bc440>}

celery worker 的结果:
<httplib2.Http object at 0x43b4a50>
{}
{'test': <httplib2.HTTPSConnectionWithTimeout instance at 0x3c6df80>}

即使我将celery任务更改为以http对象为参数,并且将函数 h中的变量 test传递给celery任务,结果也相同。

我开始认为这是由于对Google oauth'd对象的腌制。

最佳答案

我尝试只传递http.connections字典,然后得到以下信息:
kombu.exceptions.EncodeError: Cannot pickle <type 'ssl.SSLContext'> objectskombu.exceptions.EncodeError: <httplib2.HTTPSConnectionWithTimeout instance at 0x2e2c488> is not JSON serializablekombu.exceptions.EncodeError: cannot represent an object: <httplib2.HTTPSConnectionWithTimeout instance at 0x3611680>
问题在于腌制该SSL对象,该对象本来就无法腌制。

关于python - 与Celery一起分发时,Youtube API OAuth的对象失去身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30588308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com